开发者社区> shy丶gril> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

第07篇:C#星夜拾遗之delegate示例

简介:
+关注继续查看

概念

delegate即委托。如果你使用过C++或者js中的回调函数,你会更容易明白一些。在异步操作中常常使用回调函数,例如在Ajax中,当HttpRequest执行异步请求时,就需要有一个状态改变时的回调函数。回调函数其实是一个方法调用的指针,也称为函数指针。在C#中,当需要把方法作为参数进行传递时,就需要用到delegate

 

简单委托示例

定义一个委托,代码如下:

private delegate string GetString();

这个委托用来获取一个字符串。接下来在Main方法中调用:

static void Main(string[] args)

{

    int i = 20;

//iToString方法作为参数传递给委托

    GetString getString = new GetString(i.ToString);   

    Console.WriteLine(getString());     //执行委托

}

这是委托最简单的例子了,之所以上这么一个简单的例子,只是为了让大家明白,委托并不是深不可测。

 

多播委托

    所谓多播委托,其实就是可以通过 +  += 实现多个方法相加,同样可以通过 -  -= 实现方法相减。我们在Windows窗体编程中,为一个按钮添加单击事件,就可以看到这样的代码:

this.button1.Click += new System.EventHandler(this. button1_Click);

    通过多播委托我们可以为Click事件添加更多的处理函数,代码如下:

this.button1.Click += new System.EventHandler(this. button1_Click1);

 

如果想要删除一个方法,可以通过下面的代码实现:

this.button1.Click -= new System.EventHandler(this. button1_Click);

 

匿名方法

    匿名方法是用作委托参数的一个代码块。也就是说可以不对传给委托的方法命名,只需要将委托执行的代码写在一个指定的代码块中即可。下面的代码实现一个匿名方法的委托:

//这个委托定义说明,要执行的方法返回值为void,参数为string类型

private delegate void ShowString(string Text); 

 

static void Main(string[] args)

{

    string str = "这是一个匿名方法";

 

    ShowString ss = delegate(string Text)

    {

        Console.WriteLine(Text);

    };

    WriteString ws = new WriteString();

    ss += new ShowString(ws.write);

    ss.Invoke(str);

}

 

Lambda表达式

    C# 3.0中为匿名方法提供了一个新的语法:Lambda表达式。Lambda可用于委托类类型。想了解更多请参考MSDNLambda 表达式(C# 编程指南)

    下面是一个Lambda的例子,可以了解一下用法:

//这个委托定义说明,要执行的方法返回值为void,参数为string类型

private delegate void ShowString(string Text1, string Text2); 

 

static void Main(string[] args)

{

    string str1 = "第一个字符串";

    string str2 = "第二个字符串";

 

    // λ运算符 >= 左边列出委托需要的参数,如果为一个参数,可以省略()

    ShowString ss = (Text1, Text2) =>                      

    {

        // 运算符右侧为 方法或匿名方法,如果方法只有一行时可以省略 {}

        Console.WriteLine(Text1 + "\n" + Text2);

    };

 

    ss(str1, str2);

}

 

 

结束语

最后,还是那句老话,如果希望了解更多,还是多用,多查。实践是走向成功的必由之路。在最后的最后,提供出来本文示例的下载SampleDelegateTest.rar

如果认为此文对您有帮助,别忘了支持一下哦!

作者:齐飞
声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

转载:http://www.cnblogs.com/youring2/archive/2010/05/16/1736509.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
在unity中如何使用delegate
总结下使用C#中的委托(delegate)吧,其实这个并不难,但是对于没接触过的人还是有点小问题的,现在我在这做一个简单的例子来帮助大家对delegate的理解吧,想要更加加深对委托的理解,请度娘下吧,我就不在这丢人了,我也是百度后才对委托有了进一步的理解的!我们在unity中先建一个脚本,取名为TestDelegate。
1064 0
jQuery|delegate()树应用场景
jQuery delegate() 方法。 delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。
830 0
on()、live()、delegate()、bind()的比较
bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数(只对静态有效)。 $("a").bind("click",function(){alert("ok");}); live(type,[data],fn) 给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的 $("a").live("click",function(){alert("ok");}); delegate(selector,[type],[data],fn) 指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。
1039 0
C# 5 in a Nutshell - Delegate
1. What is delegate in C#? A delegate is an object that knows how to call a method.A delegate type defines the kind of method that delegate instances can call.
598 0
成员函数指针与高效C++委托 (delegate)
下载实例源代码 - 18.5 Kb 下载开发包库文件 - 18.6 Kb 概要 很遗憾, C++ 标准中没能提供面向对象的函数指针. 面向对象的函数指针也被称为闭包(closures) 或委托(delegates), 在类似的语言中已经体现出了它的价值.
1104 0
event & delegate Demo(事件&委托示例)
  1using System;  2using System.ComponentModel;  3using System.Windows.Forms;  4  5namespace WindowsFormsApplication1  6{  7    public partial cla...
756 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载