Je pensais qu'une instance de délégué était interchangeable avec une instance de fonction.Quelle est la différence entre une instance de délégué et un pointeur de méthode?
Prenez le code suivant:
delegate int AddDelegate(int a, int b);
AddDelegate DelegateInstance;
public void DoStuff()
{
//I can call this without a delegate "instance":
MethodThatTakesAdd(Add);
//I can also call it WITH a delegate "instance"
DelegateInstance = Add;
MethodThatTakesAdd(DelegateInstance);
}
public int Add(int a, int b)
{
return a + b;
}
public void MethodThatTakesAdd(AddDelegate addFunction)
{
Console.WriteLine(addFunction(1, 2).ToString());
}
Les deux façons de l'appeler semblent équivalents, et si vous utilisez que C#, vous ne verrez jamais la différence (au moins je n'ai pas jusqu'à ce point). Cependant, j'ai récemment été code non managé qui rappelait dans ce code managé, ils sont traités différemment. Par exemple, dans un scénario, je reçois l'erreur «Un rappel a été effectué sur un délégué collecté par les ordures» si j'utilise la fonction directement en tant que rappel (même si mon instance d'objet est conservée). L'utilisation de "l'instance de délégué" résout le problème.
Y at-il quelqu'un là-bas qui sait quelle est la différence?
À quoi ressemble le il? Y at-il une indication «sous le capot» qu'ils seraient normalement traités différemment? –