C#学习笔记(6)— 委托与事件

委托

委托(delegate)是一种动态调用方法的类型,它与类、接口和数组相同,属于引用型。

在C#程序中,可以声明委托类型、创建委托的实例(即委托对象)、把方法封装于委托对象之中,这样通过该对象就可以调用方法了。一个完整的方法具有名字、返回值和参数列表,用来引用方法的委托也要求必须具有同样的参数和返回值。

因为C#允许把任何具有相同签名(相同的返回值类型和参数)的方法分配给委托变量,所以可通过编程的方式来动态更改方法调用,因此委托是实现动态调用方法的最佳办法,也是C#实现事件驱动的编程模型的主要途径。

委托对象本质上代表方法的引用(内存地址)。
在.NET Framework中,委托具有以下特点:
1、委托类似于 C++ 函数指针,但与指针不同的是,委托是完全面向对象的,是安全的数据类型。
2、委托允许将方法作为参数进行传递。
3、委托可用于定义回调方法。
4、委托可以把多个方法链接在一起。这样,在事件触发时可同时启动多个事件处理程序。
5、委托签名不需要与方法精确匹配。


多路广播与委托的组合

C#的所有委托都是隐式的多路广播委托。向一个委托的调用列表添加多个方法引用,可通过该委托一次性调用所有的方法,这一过程称为多路广播。建议在使用多路广播时,每个方法均用void定义。


事件是通过委托实现的。EventHandler是一个预定义的委托,是一个无返回值的方法。在.NET中,它的定义格式如下:

public delegate void EventHandler(Object sender,EventArgs e)

其中,第一个参数sender,类型为 Object,表示事件发布者本身。第二个参数e,用来传递事件的相关数据信息,数据类型为 EventArgs及其派生类。

实际上,标准的EventArgs并不包含任何事件数据,因此EventHandler专用于表示不生成数据的事件的事件方法。如果事件要生成数据,则必须提供自定义事件数据类型,该类型从 EventArgs 派生,提供保存事件数据所需的全部字段或属性,这样发布者可以将特定的数据发送给接收者。

事件示例

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,262评论 6 13
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,241评论 30 472
  • 所有知识点已整理成app app下载地址 J2EE 部分: 1.Switch能否用string做参数? 在 Jav...
    侯蛋蛋_阅读 2,557评论 1 4
  • 1.OC里用到集合类是什么? 基本类型为:NSArray,NSSet以及NSDictionary 可变类型为:NS...
    轻皱眉头浅忧思阅读 1,399评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,180评论 19 139