当前位置:主页   - 电脑 - 网站开发 - ASP.Net
Mcad学习笔记之委托再理解
来源:网络   作者:   更新时间:2012-08-09
收藏此页】    【字号    】    【打印】    【关闭

  先定义一个委托如下:

  public delegate void myEventHandler(int i,out string o);

  再用MSIL反汇编程序(Ildasm.exe)来观看反汇编代码

  其实CLR为我们做了4件事情

  1.定义一个构造器

  2.定义一个虚方法BeginInvoke

  3.定义一个虚方法EndInvoke

  4.定义一个虚方法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)
{
}
最终调用的是System.Delegate的构造器

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明