首页 > 代码库 > 第14章 事件
第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章 事件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。