Mcad学习笔记之委托再理解2012-01-22 博客园 aierong(delegate的构造器,MulticastDelegate,BeginInvoke,EndInvoke,Invoke4个方法的探讨)先定义一个委托如下:public delegate void myEventHandler(int i,out string o);再用MSIL反汇编程序(Ildasm.exe)来观看反汇编代码其实CLR为我们做了4件事情1.定义一个构造器2.定义一个虚方法BeginInvoke3.定义一个虚方法EndInvoke4.定义一个虚方法Invoke(1)在反汇编代码中我看到如下片断:
.class auto ansi sealed nested public myEventHandler    extends [mscorlib]System.MulticastDelegate{} // end of class myEventHandler由此可以知道其实我们声明的委托myEventHandler就是一个密封类它的父类是System.MulticastDelegate看到这里,我的一个疑惑被解除了以前我也自己定义过委托,总是感觉好像在程序中到处都可以定义委托,在类里面和类的外部都可以定义,一直不知道为什么?现在我基本明白了,其实委托是一个类,类可以在哪里定义,委托就可以在哪里定义。(2)我们现在再来看看构造器在这之前,有必要搞清楚委托的继承关系System.Delegate---System.MulticastDelegate------ConsoleApplication1.myEventHandler现在我们实例化一个委托:myEventHandler my=new myEventHandler(staticCall);实际上它是在调用这个委托的构造器下面的是这个构造器的代码:public myEventHandler(object @object, IntPtr method);第一个参数应该是类实例的实例第二个参数应该是委托的方法信息这个构造器会再调用它父类的构造器,父类构造器代码如下:
protected MulticastDelegate(object target, string method) : base(target, method){}