第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
目录
相关文章
|
机器学习/深度学习 数据采集 传感器
机器学习开发流程和用到的数据介绍
机器学习开发流程和用到的数据介绍
|
IDE 开发工具 Android开发
Kotlin 的静态代码分析工具
Kotlin 的静态代码分析工具
386 0
|
运维 Kubernetes 安全
|
Linux Anolis 异构计算
关于远程直接内存访问技术 RDMA 的高性能架构设计介绍
本文介绍 RDMA 技术的基本原理及交流在工程上的设计思路。
|
SQL 数据处理 数据库
实时计算 Flink版产品使用合集之同步数据库时,库名称变了,route只能到表级别,怎么解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
11月前
|
人工智能 前端开发 API
OpenAI 12天发布会内容全纪录!一文快速回顾获知亮点信息,原文附发布会中文字幕视频
OpenAI 于12月5日宣布将举行为期12天的系列发布活动,期间每天发布一个产品或样品,包括备受期待的AI视频生成工具Sora和新的推理模型。本文将介绍这12天的发布会每日的发布内容和相关亮点信息。
747 82
|
9月前
|
SQL 数据可视化 BI
2025国内外四款主流报表工具!总有一款适合你
2025国内外四款主流报表工具!总有一款适合你
|
8月前
|
人工智能 并行计算 语音技术
Open-LLM-VTuber:宅男福音!开源AI老婆离线版上线,实时语音+Live2D互动还会脸红心跳
Open-LLM-VTuber 是一个开源的跨平台语音交互 AI 伴侣项目,支持实时语音对话、视觉感知和生动的 Live2D 动态形象,完全离线运行,保护用户隐私。
914 10
Open-LLM-VTuber:宅男福音!开源AI老婆离线版上线,实时语音+Live2D互动还会脸红心跳
|
10月前
|
机器学习/深度学习 安全 算法
十大主流联邦学习框架:技术特性、架构分析与对比研究
联邦学习(FL)是保障数据隐私的分布式模型训练关键技术。业界开发了多种开源和商业框架,如TensorFlow Federated、PySyft、NVFlare、FATE、Flower等,支持模型训练、数据安全、通信协议等功能。这些框架在灵活性、易用性、安全性和扩展性方面各有特色,适用于不同应用场景。选择合适的框架需综合考虑开源与商业、数据分区支持、安全性、易用性和技术生态集成等因素。联邦学习已在医疗、金融等领域广泛应用,选择适配具体需求的框架对实现最优模型性能至关重要。
1927 79
十大主流联邦学习框架:技术特性、架构分析与对比研究
|
Web App开发 前端开发 测试技术
Selenium 4新特性解析:关联定位器及其他创新功能
【10月更文挑战第6天】Selenium 是一个强大的自动化测试工具,广泛用于Web应用程序的测试。随着Selenium 4的发布,它引入了许多新特性和改进,使得编写和维护自动化脚本变得更加容易。本文将深入探讨Selenium 4的一些关键新特性,特别是关联定位器(Relative Locators),以及其他一些重要的创新功能。
819 2