- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 委托和事件 委托的基本概念 委托的声明、实例化和调用 多播委托 事件处理机制 事件的声明、订阅和取消 .NET Framework事件模型 9.1 委托 委托是用来处理需用函数指针来处理的情况的 委托是完全面向对象的,是类型安全的 委托是可保存对方法的引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调 委托声明定义一个从 System.Delegate 类派生的类。委托实例封装了一个调用列表,该列表列出了一个或多个方法,每个方法称为一个可调用实体。对于实例方法,可调用实体由该方法和一个相关联的实例组成 9.1.1委托的声明、实例化和调用 声明: [委托修饰符] delegate 返回值类型 委托名 ([形参列表]); 实例化: 委托名 委托实例名 = new 委托名(匹配方法); 调用: 委托实例名(实参列表); 9.1.3匿名方法委托 无需先声明类或结构以及与委托匹配的方法,而是在创建委托的实例时,直接声明与委托匹配的方法的代码块(匿名方法) 委托名 委托实例名 = new delegate([形参列表]) { 方法体; }[;] 优点:使用方便,多用于简短、临时使用的情况。 9.1.4多播委托 委托也可以包含多个方法,这种委托称为多播委托 如果调用多播委托实例,则按顺序依次调用多播委托实例封装的调用列表中的多个方法 声明多播委托时,其返回类型必须为void,因为无法处理多次调用的返回值,而且不能带输出参数(但可以带引用参数) 多播委托通过 + 或 += 向多播委托实例封装的调用列表中添加方法;通过 – 或 -= 从多播委托实例封装的调用列表中删除方法 9.1.5委托的兼容性 D和M的参数数目相同,且各自对应参数具有相同的ref或out修饰符; 对于每个ref或out参数,D中的参数类型与M中的参数类型相同。 存在从M的返回类型到D的返回类型的标识或隐式引用转换。即允许方法具有的派生返回类型比委托中定义的更多(协变)。 每一个值参数(没有 ref 或 out 修饰符的参数)都存在从D中的参数类型到M中的对应参数类型的标识或隐式引用转换。允许方法具有的派生参数类型比委托类型中的更少(逆变) 9.2事件 类或对象可以通过事件(event)向其他类或对象通知发生的相关事情。发送(或引发)事件的类称为“发行者”(生产者),接收(或处理)事件的类称为“订户”(消费者)。 事件是一种使对象或类能够提供通知的成员。客户端可以通过提供事件处理程序(event handler)为相应的事件添加可执行代码。 事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的 事件特点 发行者确定何时引发事件,订户确定执行何种操作来响应该事件 一个事件可以有多个订户。一个订户可处理来自多个发行者的多个事件 没有订户的事件永远不会被调用 事件通常用于通知用户操作,例如,图形用户界面中的按钮单击或菜单选择操作 如果一个事件有多个订户,当引发该事件时,会同步调用多个事件处理程序 可以利用事件同步线程 在 .NET Framework 类库中,事件是基于 EventHandler 委托和 EventArgs 基类的 事件处理机制 事件实际上是委托的一种特殊形式。C# 使用一种委托模型来实现事件。事件模型分为事件生产者和事件消费者,其处理机制大致可以分为下列4步 在事件生产者类中声明一个事件成员,即某种事件处理委托(简称为事件委托)的实例(多播事件委托实例); 在事件消费者类中声明与事件委托相匹配的事件处理方法; 通过“+=”向多播事件委托实例封装的调用列表中添加事件处理方法,或通过“-=”从多播事件委托实例封装的调用列表中删除事件处理方法; 在事件生产者类中添加有关发生事件的代码,即当满足某种条件时(发生事件),则调用委托,即调用多播事件委托实例封装的调用列表中添加的事件处理方法。如果没有订阅,即事件实例为Null,则不作任何处理。 事件的声明、订阅和取消 声明:[修饰符] event 事件委托名 事件名; C#使用加法赋值运算符(+=)来为事件附加事件处理程序;使用减法赋值运算符(-=)取消订阅事件,所有订户都取消订阅事件后,发行者类中的事件实例将设置为 null 对象.事件名 += 委托实例; 对象.事件名 -= 委托实例;
您可能关注的文档
- 《概率论与数理统计》复习课.ppt
- C++教学课件:第11章 泛型.ppt
- C++教学课件:第12章 特性.ppt
- 材料力学:材料力学绪论.ppt
- 材料力学:第2章2剪切变形.ppt
- 材料力学:第2章轴向载荷作用下的问题.ppt
- 材料力学:第3章轴向载荷下的材料性能.ppt
- 材料力学:第4章扭转变形.ppt
- 材料力学:动载荷.ppt
- 材料力学:梁的刚度计算.ppt
- 2025河北邯郸市公安局特警支队训练基地招聘机动处突队员55人备考题库附答案.docx
- 2025温州乐清市面向优秀硕博人才招聘事业单位工作人员10人参考题库附答案.docx
- 2025河南格林循环电子废弃物处置有限公司招聘10人考前自测高频考点模拟试题最新.docx
- 2025河北张家口康保县公安局公开招聘警务辅助工作人员57名备考题库附答案.docx
- 2025赣州市自然资源局章贡分局招聘劳务派遣制工作人员1人备考题库附答案.docx
- 2025数字重庆政务科技有限公司招聘26人模拟试卷最新.docx
- 2025河南南阳市宛城区发改委下属事业单位选调10人备考题库附答案.docx
- 2025湖南中共道县县委巡察工作领导小组办公室选调2人备考题库最新.docx
- 2025河北张家口市怀来经开创新实业有限公司招聘工作人员2人笔试备考试题最新.docx
- 2025年长兴县融媒体中心(县广播电视台)招聘笔试模拟试题附答案.docx
原创力文档


文档评论(0)