谈谈.Net 4.0 中的委托delegate

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 09:16 点击:

 

.Net中的委托从功能上讲和c语言或者c++中的方法指针类似,可以像调用方法一样调用委托完成某个功能,或返回某类结果。但是.Net毕竟是更高级的语言,委托Delegate也更高级了,委托是一种数据接口,它包含调用目标和调用方法的指针;而在.Net中定义的委托都继承自MulticastDelegate即多播委托,所谓的多播委托是指可以包含多个调用方法的委托。

 

一. 先来看下委托的定义:

 

如下C#代码定义委托

 

public delegate void DoSomething(int times);

 

委托的定义包含5个部分

 

1)public表示委托的可访问性

 

2)delegate关键字表示要定义一个委托

 

3)void表示委托定义方法的返回值

 

4)DoSomething是委托的名字

 

5)(int times) 是委托方法的参数列表,此处的参数列表可以包括ref参数,也可以有out参数,同样也可以有parms可变数量参数;需要注意如果委托中有多个调用方法,使用out参数时只能返回委托最后执行成功的一个委托方法的计算值

 

在C#中定义委托非常简单,只比方法定义的返回值之前多一个delegate关键字即可。

 

可是我们知道所有的用户定义委托都继承自MulticastDelegate;而MulticastDelegate是一个类;所以自定义的委托肯定也是一个类;看下上述代码的IL代码就可以证明我们的推断:

 

.class public auto ansi sealed delegates.DoSomething 

 

    extends [mscorlib]System.MulticastDelegate 

 

 

    // Methods 

 

    .method public hidebysig specialname rtspecialname  

 

        instance void .ctor ( 

 

            object 'object', 

 

            native int 'method'

 

        ) runtime managed  

 

    { 

 

    } // end of method DoSomething::.ctor 

 

  

 

    .method public hidebysig newslot virtual 

 

        instance void Invoke ( 

 

            int32 times 

 

        ) runtime managed  

 

    { 

 

  

 

    } // end of method DoSomething::Invoke 

 

  

 

   

 

    .method public hidebysig newslot virtual 

 

        instance class [mscorlib]System.IAsyncResult BeginInvoke ( 

 

            int32 times, 

 

            class [mscorlib]System.AsyncCallback callback, 

 

            object 'object'

 

        ) runtime managed  

 

    { 

 

  

 

    } // end of method DoSomething::BeginInvoke 

 

  

 

  

 

    .method public hidebysig newslot virtual 

 

        instance void EndInvoke ( 

&n

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • 浅析.NET下XML数据访问新机制
    • asp.net 面试+笔试题目第1/2页
    • C# 邮件地址是否合法的验证
    • C#高级编程:数据库连接[1]
    • asp.net 设置GridView的选中行的实现代码
    • 经典C++程序1
    • IIS 自动回收导致后台定时器失效的问题解决
    • ASP.NET GridView列表代码示例
    • 微软ASP.NET站点部署指南(3):使用Web.Config文件的Transforma
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1