事件
初步了解事件
- 定义:单词Event,译为“事件”。通俗的解释就是:“能够发生的什么事情”
- 角色:使对象或类具备通知能力的成员
- 使用:用于对象或类间的动作协调与信息传递(消息推送)
- 原理: 事件模型*(Event Model)中的两个5
- “发生->响应”中的5个部分——— 闹钟响了你起床、孩子饿了你做饭 分析:闹钟(事件拥有者),响了(事件本身),你(事件订阅者),起床(响应事件),及蕴含的"订阅"关系
- “发生->响应”中的5个动作——— (1)我有一个事件(2)一个人或一群人关心这个事件 (3)我的这个事件发生了 (4)关系这个事件的人被依次通知到了 (5)被通知到了的人根据拿到的事件信息(又称“事件数据”、“事件参数”)对事件进行响应
事件的声明
- 完整声明
12345678910111213141516
public
class
Custorm
{
private
OrderEventHandler orderEventHandler;
public
event
OrderEventHandler Order
{
add
{
orderEventHandler += value;
}
remove
{
orderEventHandler += value;
}
}
}
- 简略声明(字段式声明,field-like) 属于C#提供的语法糖 通过反编译发现,使用简略声明时,系统会帮助我们生成一个委托类型字段
1234
public
class
Custorm
{
public
event
OrderEventHandler Order;
}
- 有了委托字段/属性,为什么还需要事件? 为了程序的逻辑更加“有道理”,更加安全,谨防“借刀杀人”,检验而言,属于类的事件,只有类自身可以触发。
- 事件的本质时委托字段的一个包装器。
事件与委托的关系
- 事件的本质是加装在委托字段上的一个“蒙版”,是个起掩蔽作用的包装器。这个用于阻挡非法操作的“蒙版”,绝不是委托字段本身。
- 为什么要用委托类型来申明事件?
- 站在source的角度来看,是为了表明source能对外传递哪些消息
- 站在subscriber的角度来看,它是一种约定,是为了约束能够使用什么样的签名方法来处理(响应)事件
- 委托类型的实例将用于存储(引用)事件处理器
- 对比事件与属性
- 属性不是字段——很多时候属性是字段的包装器,这个包装器用来保护字段不被滥用
- 事件不是委托字段——它是委托字段的包装器,这个包装器用来保护委托字段不被滥用
- 包装器永远不可能是被包装的东西
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)