事件
作者:互联网
初步了解事件
- 定义:单词Event,译为“事件”。通俗的解释就是:“能够发生的什么事情”
- 角色:使对象或类具备通知能力的成员
- 使用:用于对象或类间的动作协调与信息传递(消息推送)
- 原理: 事件模型*(Event Model)中的两个5
- “发生->响应”中的5个部分——— 闹钟响了你起床、孩子饿了你做饭 分析:闹钟(事件拥有者),响了(事件本身),你(事件订阅者),起床(响应事件),及蕴含的"订阅"关系
- “发生->响应”中的5个动作——— (1)我有一个事件(2)一个人或一群人关心这个事件 (3)我的这个事件发生了 (4)关系这个事件的人被依次通知到了 (5)被通知到了的人根据拿到的事件信息(又称“事件数据”、“事件参数”)对事件进行响应
事件的声明
- 完整声明
public class Custorm { private OrderEventHandler orderEventHandler; public event OrderEventHandler Order { add { orderEventHandler += value; } remove { orderEventHandler += value; } } }
- 简略声明(字段式声明,field-like) 属于C#提供的语法糖 通过反编译发现,使用简略声明时,系统会帮助我们生成一个委托类型字段
public class Custorm { public event OrderEventHandler Order; }
- 有了委托字段/属性,为什么还需要事件? 为了程序的逻辑更加“有道理”,更加安全,谨防“借刀杀人”,检验而言,属于类的事件,只有类自身可以触发。
- 事件的本质时委托字段的一个包装器。
事件与委托的关系
- 事件的本质是加装在委托字段上的一个“蒙版”,是个起掩蔽作用的包装器。这个用于阻挡非法操作的“蒙版”,绝不是委托字段本身。
- 为什么要用委托类型来申明事件?
- 站在source的角度来看,是为了表明source能对外传递哪些消息
- 站在subscriber的角度来看,它是一种约定,是为了约束能够使用什么样的签名方法来处理(响应)事件
- 委托类型的实例将用于存储(引用)事件处理器
- 对比事件与属性
- 属性不是字段——很多时候属性是字段的包装器,这个包装器用来保护字段不被滥用
- 事件不是委托字段——它是委托字段的包装器,这个包装器用来保护委托字段不被滥用
- 包装器永远不可能是被包装的东西
标签:委托,包装,响应,字段,事件,public 来源: https://www.cnblogs.com/xmbwl/p/16517427.html