我认为一个委托实例可以与函数实例互换.
采取以下代码:
- 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#,你将永远不会看到差异(至少我还没有达到这一点).但是,最近我是一个非托管代码,正在调用这个托管代码,它们被不同的对待.例如,在一种情况下,如果我将函数直接用作回调(即使我的对象实例被保留),我将收到错误“回收一个垃圾收集的委托”.使用“委托实例”来解决问题.
那里有人知道有什么区别吗?