委托揭秘
2009-06-10 08:32:08 来源:WEB开发网首先重新查看下面这行代码:代码1-2
public delegate void MyDelegate();
代码1-2
看到这行代码时,编译器实际上会像下面这样定义一个完整的类:代码1-3
public class MyDelegate : System.MulticastDelegate
{
//构造器
public MyDelegate(Object aobject,IntPtr method);
//方法的原型与源代码指定的相同
public virtual void Invoke();
//允许异步回调的方法
public virtual IAsyncResult BeginInvoke(
AsyncCallback callback, object aobject);
public virtual void EndInvoke(IAsyncResult result);
}
代码1-3
编译器定义的类有4个方法:一个构造器、Invoke、BeginInvoke和EndInvoke。在本章,要重点解释构造器和Invoke方法。
事实上,可以验证编译器确实会自动生成这个类,具体做法就是用ILDasm.exe来查看生成的程序集(assembly),如图1-1所示。
图片看不清楚?请点击这里查看原图(大图)。
图1-1 ILDasm.exe 显示了编译器为委托生成的元数据
在这个例子中,编译器定义了一个类,名为MyDelegate,该类继承自 Framework Class Library(FCL)中定义的System.MulticastDelegate 类型(所有委托类型都继承自 MulticastDelegate)。
更多精彩
赞助商链接