第8章 面向对象.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8.5 委托 8.5.4 委托中的协变与逆变 2. 逆变 public int getPosition(Person p){ …… } public int getPosition(Student s){ …… } 现在有一个委托Position,声明格式如下: public delegate int Position(Student s); 显然委托Position的签名与第二个getPosition方法签名相同,而委托Position的参数数据类型正好是第一个getPosition方法的参数数据类型的派生类,因此如果使用该委托来调用第一个getPosition方法,则系统将进行隐式转换,把委托的Student类型转换为Person类型。 综上所述,协变是指能够使用与原始指定的派生类型相比,派生程度更大的类型;逆变则是指能够使用派生程度更小的类型。 8.6 事件 事件(event)是面向对象程序设计的重要特征之一,是类的重要成员,其使用方法和委托的联系非常密切。 8.6.1 事件简介 事件是类用来通知对象需要执行某种操作的方式,通常用在图形用户界面中。在Windows应用程序运行时,经常会产生许多事件,例如:鼠标单击按钮、按下按键、窗口最小化或者最大化等。 8.6 事件 8.6.1 事件简介 事件定义为对象发送的消息,以发消息的形式通知操作的发生。事件本质上就是对消息的封装,用作对象之间的通信。 面向对象程序设计是基于事件驱动的程序设计,一个完整的事件处理系统一般有三个构成要素: (1) 事件源:指能触发事件的对象,也称为事件的发送者或事件的发布者。 (2) 侦听器:指能接收到事件消息的对象,Windows提供了基础的事件侦听服务。 (3) 事件处理程序:当事件发生时,可以对事件进行处理,也称为事件函数或事件方法; 8.6 事件 8.6.1 事件简介 要想正确的处理.NET中的事件,关键是要理解事件和委托是如何工作的。基于“发布者/订阅者(publish / subscriber)”模式的具体实现步骤如下: (1) 定义委托类型,并在发布者类中定义一个该类型的公有事件成员。 (2) 在订阅者类中定义委托处理方法。 (3) 订阅者对象将其事件处理方法合并到发布者对象的事件成员上。 (4) 发布者对象在特定的情况下激发事件,自动调用订阅者对象的委托处理方法。 8.6 事件 8.6.2 声明事件和激发事件 在C#中,事件实际上是委托类型的变量,是委托的一种特殊形式。C#允许使用内置的委托类型来声明一个标准的事件,也允许先自定义委托,再声明自定义事件。 在.NET Framework中内置的EventHandler委托具有两个参数,它们的数据类型分别是Object和EventArgs类型,并且没有返回值。Object类型的参数名通常为sender,表示事件发布者本身;EventArgs类型的参数名通常为e,它将System.EventArgs类的新实例传递给事件处理方法,主要包括与事件相关的数据。 在实际编程中,有时需要从EventArgs类派生自定义事件参数类,这样发布者可以将特定的数据发送给接收者的事件处理方法。 8.6 事件 8.6.2 声明事件和激发事件 使用内置的EventHandler委托声明事件的一般格式如下: 【格式】public event EventHandler 事件名; 【说明】event关键字用于在发布者类中声明事件。 例如,以下代码表示定义了一个名为onClick的事件。 public event EventHandler onClick; 8.6 事件 8.6.2 声明事件和激发事件 使用自定义的委托类型也可以声明事件,一般格式如下: public delegate 返回值类型 委托类型名([参数列表]); public event 委托类型名 事件名; 【说明】委托类型的参数非常灵活,可以省略,可以是标准的Object参数和EventArgs参数,也可以是其他参数,但一定要注意保证与事件处理程序的参数匹配。 8.6 事件 8.6.3 订阅事件和处理事件 事件声明之后,实质上得到的只是一个委托型的变量,并不意味着就能够成功触发事件。如何将声明的事件和事件处理程序联系起来呢?这就要用到订阅者(负责绑定事件与事件方法的类)。 也就是需要在接收事件的类中创建一个方法来响应这个事件(即处理事件),并且创建委托对象把事件与事件方法联系起来,这个操作过程称为“订阅事件”。 【例8-9】 应用事件驱动模型解决交通红绿灯问题。 8.6 事件

文档评论(0)

189****1620 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档