这本书讲解 C# 语言十分详细,我将其中的重要内容整理成条款,以备忘。
1. 事件是在满足某个特定条件时发生的,触发 (raise) 事件的对象称为发布者 (publisher) ,对这个事件进行响应的对象称为订阅者 (subscriber) 。事件处理程序是注册到事件的方法,可在任何类或者结构中。
2. 自定义事件的步骤:
1. 委托声明:事件和事件的处理程序必须有相同的签名和返回类型。都通过对应的委托类型来描述。
2. 事件处理程序声明:在事件被触发后执行的方法。
3. 事件声明:在事件发布者类中声明保存并调用事件处理程序。
4. 订阅事件:将事件处理程序与事件连接起来。
5. 编写触发事件的代码:在发布者类中编写代码触发事件导致订阅此事件的事件处理程序被调用。
3. 声明事件时需要委托的名字,语法为: public event DelegateName EventName; 事件与委托的行为十分相似,原因是事件其实是对委托的封装,事件中包含一个私有的委托变量,提供对它的私有控制,并对外界提供了有限的操作方式 ,这样用户代码就不可以对这个委托进行可能会破坏面向对象封装性的操作了。 += 和 -= 是事件唯一允许的运算符 ,它们分别用来对事件进行添加 和删除 事件处理程序。
4. 注意:与委托不同,事件是一个类的成员 ,而非是类型。事件是某个特定类型中的一种成员,它允许它所在的类型(或者类型的实例)在某些特定事情发生的时候通知其他对象。由于事件是成员,所以不可以使用对象创建表达式 (new) 来创建它的对象,且事件必须声明在类或结构中,另外:事件成员被隐式自动初始化为 null 。
5. 触发事件看起来与调用方法类似。使用事件名称,参数列表包含在圆括号中。参数列表必须匹配事件的委托类型。
6. 为事件添加事件处理程序时,处理程序必须和委托类型拥有相同的返回类型和签名 。通过 += 运算符来为事件添加处理程序。事件处理程序可以是以下任何一种:
实例方法
静态方法
匿名方法
Lambda 表达式