參考:
框架設計(第二版):CLR Via C#——15.4 委托揭秘(P281)
正文:
代碼1-1,這是一個簡單的委托使用。
using System;
using System.Collections.Generic;
using System.Text;
namespace Delegate
{
public class DelegateTest
{
protected delegate void MyDelegate();
private void TestMethod() { }
private void Method()
{
MyDelegate aMyDelegate = new MyDelegate(TestMethod);
Method(aMyDelegate);
}
private void Method(MyDelegate aMyDelegate)
{
if (aMyDelegate != null)
{
aMyDelegate();
}
}
}
}
代碼1-1
從表面上看,委托似乎很容易使用:用C#的delegate關鍵字來定義,用我們都熟悉的new操作符來構造委托實例,用我們熟悉的方法調用語法來調用回調函數(不過要用引用了委托對象的變量來代替方法名)。
然而,實際情況比前面幾個例子所演示的復雜得多。編譯器和CLR做了大量的幕後工作來隱藏復雜性。本節將集中講解編譯器和CLR是如何實現委托的。掌握這些知識有助於我們理解委托,並學會如何更好地使用它們。與此同時,本節還要適當地介紹委托的其它一些特征。
首先重新查看下面這行代碼:代碼1-2
public delegate void MyDelegate();
代碼1-2