新手学做网站pdf手,网站前端用什么做,惠州小程序搭建,网站开发建设价格文章目录 15.1 发布者和订阅者15.2 源代码组件概览15.3 声明事件15.4 订阅事件15.5 触发事件15.6 标准事件的用法15.6.1 通过扩展 EventArgs 来传递数据15.6.2 移除事件处理程序 15.7 事件访问器 15.1 发布者和订阅者
发布者 / 订阅者模式#xff1a;发布者定义了一系列事… 文章目录 15.1 发布者和订阅者15.2 源代码组件概览15.3 声明事件15.4 订阅事件15.5 触发事件15.6 标准事件的用法15.6.1 通过扩展 EventArgs 来传递数据15.6.2 移除事件处理程序 15.7 事件访问器 15.1 发布者和订阅者
发布者 / 订阅者模式发布者定义了一系列事件订阅者可以通过向发布者提供一个方法来“注册”以获取通知。
当事件发生时发布者“触发事件”然后执行订阅者提交的所有方法。 图15.1 发布者和订阅者 发布者发布某个事件的类或结构其他类可以在该事件发生时得到通知。订阅者注册事件在事件发生时得到通知的类或结构。 图15.2 事件含有被封装的委托 事件提供私有委托的结构化访问你无法直接访问委托。对事件只能进行添加、删除或调用操作。事件被触发时会调用委托来依次执行列表中的方法。 图15.3 具有一个事件的类结构和术语 15.2 源代码组件概览
需要在事件中使用的代码有以下 5 部分
委托类型声明。事件处理程序声明。事件声明。事件注册。触发事件的代码。 图15.4 使用事件时的 5 个源代码组件 15.3 声明事件
事件声明在一个类中。需要委托类型的名称。声明为 public 以供外部订阅者访问。不能使用 new 创建事件对象。 图15.5 声明事件 事件是成员并不是类型
不能在一段可执行代码中声明事件。必须声明在类或结构中。事件成员被隐式自动初始化为 null。BCL 声明了名为 EventHandler 的委托专门用于系统事件。
15.4 订阅事件
使用 运算符为事件添加事件处理程序。事件处理程序可以是以下任意一种 实例方法。静态方法。匿名方法。Lambda 表达式。 图15.6 订阅事件的方式 15.5 触发事件
触发事件前与 null 比较。和调用方法一样使用事件。 图15.7 触发事件 以下示例展示发布者 Incrementer 和订阅者 Dozens 的使用在 DoCount 方法中每增加 12 个计数就触发 CountedADozen 事件。 图15.8 包含发布者和订阅者的完整程序展示了使用事件所必须的 5 个部分 15.6 标准事件的用法
Windows GUI 编程广泛使用事件EventHandler 委托类型的声明如下 图15.9 EventHandler 委托类型声明 第一个参数用来保存触发事件对象的引用。第二个参数用来保存状态信息。EventArgs 不能传递任何数据通常会被忽略。如果需要传递数据需要对 EventArgs 进行派生用合适字段存储数据。object 和 EventArgs 总是传入参数的基类因此可以用于处理所有事件。
15.6.1 通过扩展 EventArgs 来传递数据
自定义如下信息类类的名称应以 EventArgs 结尾 图15.10 自定义信息类 使用带泛型的委托以使用自定义信息类 图15.11 使用泛型委托以使用自定义信息类 15.6.2 移除事件处理程序
使用 - 运算符移除事件处理程序。
和委托类似如果一个处理程序在事件内注册了多次移除时只移除列表最后一个。
15.7 事件访问器
使用 add 和 remove 访问器可以修改 和 - 运算符的行为。
声明事件访问器看上去和声明属性类似。声明事件访问器后事件不包含内嵌委托需要自己实现存储和移除事件的方法。事件访问器没有返回值为 void 方法。 图15.12 事件访问器