我以为委托实例可以和函数实例通用。
看下面的代码:
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());
}
两种调用方式看起来是等价的,如果您只使用C#,您不会看到任何区别(至少在我目前的使用中没有)。然而,最近我遇到了一些调用非托管代码的情况,它们对这个托管代码进行了回调,它们被不同地处理。例如,在某种情况下,如果我直接将函数用作回调(即使我的对象实例保持不变),我会收到“在垃圾回收委托上进行了回调”的错误。使用“委托实例”可以解决这个问题。
有人知道它们之间的区别吗?