事件

2022/7/26 23:29:29

本文主要是介绍事件,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

初步了解事件

  • 定义:单词Event,译为“事件”。通俗的解释就是:“能够发生的什么事情”
  • 角色:使对象或类具备通知能力的成员
  • 使用:用于对象或类间的动作协调与信息传递(消息推送)
  • 原理: 事件模型*(Event Model)中的两个5
  1. “发生->响应”中的5个部分——— 闹钟响了你起床、孩子饿了你做饭  分析:闹钟(事件拥有者),响了(事件本身),你(事件订阅者),起床(响应事件),及蕴含的"订阅"关系
  2. “发生->响应”中的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;          
            }
    

     

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

事件与委托的关系

  • 事件的本质是加装在委托字段上的一个“蒙版”,是个起掩蔽作用的包装器。这个用于阻挡非法操作的“蒙版”,绝不是委托字段本身。
  • 为什么要用委托类型来申明事件?
  1. 站在source的角度来看,是为了表明source能对外传递哪些消息
  2. 站在subscriber的角度来看,它是一种约定,是为了约束能够使用什么样的签名方法来处理(响应)事件
  3. 委托类型的实例将用于存储(引用)事件处理器
  • 对比事件与属性
  1. 属性不是字段——很多时候属性是字段的包装器,这个包装器用来保护字段不被滥用
  2. 事件不是委托字段——它是委托字段的包装器,这个包装器用来保护委托字段不被滥用
  3. 包装器永远不可能是被包装的东西


这篇关于事件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程