事件

初步了解事件

  • 定义:单词Event,译为“事件”。通俗的解释就是:“能够发生的什么事情
  • 角色:使对象或类具备通知能力的成员
  • 使用:用于对象或类间的动作协调与信息传递(消息推送)
  • 原理: 事件模型*(Event Model)中的两个5
  1. “发生->响应”中的5个部分——— 闹钟响了你起床、孩子饿了你做饭  分析:闹钟(事件拥有者),响了(事件本身),你(事件订阅者),起床(响应事件),及蕴含的"订阅"关系
  2. “发生->响应”中的5个动作——— (1)我有一个事件(2)一个人或一群人关心这个事件 (3)我的这个事件发生了 (4)关系这个事件的人被依次通知到了 (5)被通知到了的人根据拿到的事件信息(又称“事件数据”、“事件参数”)对事件进行响应

 事件的声明

  • 完整声明
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class Custorm
            {         
                private OrderEventHandler orderEventHandler;         
     
                public event OrderEventHandler Order
                {
                    add
                    {
                        orderEventHandler += value;
                    }
                    remove
                    {
                        orderEventHandler += value;
                    }
                }          
            }

      

  • 简略声明(字段式声明,field-like) 属于C#提供的语法糖  通过反编译发现,使用简略声明时,系统会帮助我们生成一个委托类型字段
    1
    2
    3
    4
    public class Custorm
            {           
                public event OrderEventHandler Order;         
            }

     

  • 有了委托字段/属性,为什么还需要事件?   为了程序的逻辑更加“有道理”,更加安全,谨防“借刀杀人”,检验而言,属于类的事件,只有类自身可以触发。
  • 事件的本质时委托字段的一个包装器。

事件与委托的关系

  • 事件的本质是加装在委托字段上的一个“蒙版”,是个起掩蔽作用的包装器。这个用于阻挡非法操作的“蒙版”,绝不是委托字段本身。
  • 为什么要用委托类型来申明事件?
  1. 站在source的角度来看,是为了表明source能对外传递哪些消息
  2. 站在subscriber的角度来看,它是一种约定,是为了约束能够使用什么样的签名方法来处理(响应)事件
  3. 委托类型的实例将用于存储(引用)事件处理器
  • 对比事件与属性
  1. 属性不是字段——很多时候属性是字段的包装器,这个包装器用来保护字段不被滥用
  2. 事件不是委托字段——它是委托字段的包装器,这个包装器用来保护委托字段不被滥用
  3. 包装器永远不可能是被包装的东西
posted @   小毛备忘录  阅读(340)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示