网站大量收购独家精品文档,联系QQ:2885784924

介绍章委托课件1 ch09.pptx

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第9章委托和事件? 委托的基本概念;? 委托的声明、实例化和调用;? 多播委托;? 事件处理机制;? 事件的声明、订阅和取消;? .NETFramework事件模型

9.1委托委托是用来处理需用函数指针来处理的情况的委托是完全面向对象的,是类型安全的委托是可保存对方法的引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调委托声明定义一个从System.Delegate类派生的类。委托实例封装了一个调用列表,该列表列出了一个或多个方法,每个方法称为一个可调用实体。对于实例方法,可调用实体由该方法和一个相关联的实例组成

委托的声明、实例化和调用声明:[委托修饰符]delegate返回值类型委托名([形参列表]);实例化:委托名委托实例名=new委托名(匹配方法);调用:委托实例名(实参列表);

【例9.1】委托的实例化和调用示例1源代码应用程序

【例9.2】委托的实例化和调用示例2源代码应用程序

匿名方法委托无需先声明类或结构以及与委托匹配的方法,而是在创建委托的实例时,直接声明与委托匹配的方法的代码块(匿名方法)委托名委托实例名=newdelegate([形参列表]){方法体;}[;]

【例9.3】匿名方法委托示例源代码应用程序

多播委托(1)委托也可以包含多个方法,这种委托称为多播委托如果调用多播委托实例,则按顺序依次调用多播委托实例封装的调用列表中的多个方法声明多播委托时,其返回类型必须为void,因为无法处理多次调用的返回值,而且不能带输出参数(但可以带引用参数)多播委托通过+或+=向多播委托实例封装的调用列表中添加方法;通过–或-=从多播委托实例封装的调用列表中删除方法

多播委托(2)基本语法为(假设声明委托D,创建其实例d1、d2、…、dn、d):

【例9.4】多播委托示例源代码应用程序

委托的异步调用【例9.5】委托的异步调用示例源代码应用程序

委托的兼容性D和M的参数数目相同,且各自对应参数具有相同的ref或out修饰符;对于每个ref或out参数,D中的参数类型与M中的参数类型相同。存在从M的返回类型到D的返回类型的标识或隐式引用转换。即允许方法具有的派生返回类型比委托中定义的更多(协变)。每一个值参数(没有ref或out修饰符的参数)都存在从D中的参数类型到M中的对应参数类型的标识或隐式引用转换。允许方法具有的派生参数类型比委托类型中的更少(逆变)

【例9.6】委托的兼容性示例源代码应用程序

9.2事件类或对象可以通过事件(event)向其他类或对象通知发生的相关事情。发送(或引发)事件的类称为“发行者”(生产者),接收(或处理)事件的类称为“订户”(消费者)。事件是一种使对象或类能够提供通知的成员。客户端可以通过提供事件处理程序(eventhandler)为相应的事件添加可执行代码。事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的

事件特点发行者确定何时引发事件,订户确定执行何种操作来响应该事件一个事件可以有多个订户。一个订户可处理来自多个发行者的多个事件没有订户的事件永远不会被调用事件通常用于通知用户操作,例如,图形用户界面中的按钮单击或菜单选择操作如果一个事件有多个订户,当引发该事件时,会同步调用多个事件处理程序可以利用事件同步线程在.NETFramework类库中,事件是基于EventHandler委托和EventArgs基类的

事件处理机制事件实际上是委托的一种特殊形式。C#使用一种委托模型来实现事件。事件模型分为事件生产者和事件消费者,其处理机制大致可以分为下列4步在事件生产者类中声明一个事件成员,即某种事件处理委托(简称为事件委托)的实例(多播事件委托实例);在事件消费者类中声明与事件委托相匹配的事件处理方法;通过“+=”向多播事件委托实例封装的调用列表中添加事件处理方法,或通过“-=”从多播事件委托实例封装的调用列表中删除事件处理方法;在事件生产者类中添加有关发生事件的代码,即当满足某种条件时(发生事件),则调用委托,即调用多播事件委托实例封装的调用列表中添加的事件处理方法。如果没有订阅,即事件实例为Null,则不作任何处理

【例9.7】事件处理机制示例源代码应用程序

事件的声明、订阅和取消声明:[修饰符]event事件委托名事件名;C#使用加法赋值运算符(+=)来为事件附加事件处理程序;使用减法赋值运算符(-=)取消订阅事件,所有订户都取消订阅事件后,发行者类中的事件实例将设置为null【例9.8】事件的声明、引发、订阅和取消示例【例9.

您可能关注的文档

文档评论(0)

183****7931 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档