我認爲委託實例可以與函數實例互換。委託實例和方法指針有什麼區別?
看看下面的代碼:
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#中,你永遠不會看到其中的差別(至少我還沒有達到這點)。不過,我最近是託管代碼的非託管代碼,它們的處理方式不同。例如,在一種情況下,如果我直接將該函數用作回調函數(即使我的對象實例保留在附近),我將得到錯誤「回調是在垃圾回收委託上進行的」。使用「委託實例」可以解決問題。
有沒有人知道有什麼區別?
il是什麼樣的?有沒有任何跡象表明「底層」,他們通常會被區別對待? – 2009-11-05 16:53:03