第14章 事件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第14章 事件相关的知识,希望对你有一定的参考价值。
- 事件基于委托,为委托提供了一种发布机制, 事件是成员,是对象,而不是类型.
So: 必须声明在类或者结构中; 被隐式初始化为null.
- 几个概念:
发布者( publisher )
订阅者( subscriber )
事件处理程序( event handler )
触发(raise ) 事件调用( invoke ) 或触发( fire )
- 事件封装了一个私有的委托
- 使用事件的5个源代码组件
- 具体如图
? ?
- 声明事件:
- 事件声明需要委托类型的名字,必须指定事件保存的方法的签名和返回值类型.更好的方案是EventHandler委托
? ?
- 使用自定义委托:
- 使用非泛型委托:
public delegate void MyEventHandler (object sender, MyEventArgs e)
? ?
- 使用泛型委托:
//public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e); //EventHandler的原型
public delegate void EventHandler<MyEventArgs> EventX; //声明事件
- 订阅事件 +=
事件处理程序可以是以下任意一种:
- 实例方法的名称;
- 静态方法的名称;
- 匿名方法;
- Lambda表达式
- 触发事件,使用方法同调用函数类似:
- 使用事件名称,后面跟的参数列表包含在圆括号中;
- 参数列表必须与事件的委托类型相匹配。
- 移除事件处理方法:
如果一个处理程序向事件注册了多次,那么当执行命令移除处理程序时,将只移除列表中该
处理程序的最后一个实例。
- 定义事件访问器 (事件访问器表现为Void 方法,不能使用return语句)
- 注意: 声明了事件访问器之后,事件不再包含任何内嵌的委托对象; 必须手动实现存储和移除事件的方法.
? ?
? ?
? ?
? ?
? ?
以上是关于第14章 事件的主要内容,如果未能解决你的问题,请参考以下文章