C#学习笔记(十四)事件(一)通知

传送门:

第一部分:C#学习笔记(十四)事件(一)通知

第二部分:C#学习笔记(十五)事件(二)事件模型

第三部分:C#学习笔记(十六)事件(三)自定义事件+事件不是委托

第四部分:C#学习笔记(十七)事件(四)事件个人总结


定义:

单词:Event,翻译为“事件”。

《牛津词典》中的解释:“a thing that happens, especially something important”。

通顺的解释就是:能够发生的什么事情。

如果一个作为主语的名词可以使用 发生 这个词来作为的他的谓语动词的话,那么这个名词就是个事件

举个栗子:拿苹果作为主语,谓语动词就不能是发生。但如果是苹果新机发布,或者说苹果公司上市作为主语的话,他们都是可以发生的,也就是说他们都是事件。也就是说是以公司为主体的上市,和以新机为主体的发布,这两个东西才是事件

事件最大的特点就是能够发生

凡是事件都是隶属于某个主体的。没有主体,就没有发生。

没有公司,就没有上市这件事的发生。

没有产品就没有发布这个事件发生。


角色:

使对象或类具备通知能力成员。设计模式中的观察者模式

面向对象的编程,就是对现实世界的模拟。现实世界中的事件,必须基于某个主体,抽象之后,也必然是一个对象或者类的成员

一切皆对象,一切皆地址。

类型成员,为什么是成员呢?因为事件必须依附主体,隶属于某个主体。没有公司,就没有上市这件事情的发生。没有苹果,就没有发布这件事。

每一种成员都有自己特定的功能:

  • 比如属性的功能:用来存储和访问数据。

  • 比如方法的功能:用来做事情。说白了就是数据加工厂:进行逻辑运算。

  • 事件的功能:事件发生之后的效果,才是事件的功能:能够通知

    • (中译)事件(event)是一种使对象或类能够提供通知的成员。
    • (原文)An event is a member that enables an object or class to provide notifications
    • "对象O拥有一个事件E"想表达的思想是:当事件E发生的时候,对象O有能力通知别的对象。

再举个栗子:手机有响铃这个事件。手机可以通过响铃这个事件,来通知  关注这个手机的对象(主体)或者说人,或者说响铃这个事件让手机具备了通知关注者的能力。当手机铃声响起的时候,从手机的角度看,是通知关注他的人,要求关注它的人采取行动;站在人的角度来看,人得到了手机的通知,可以采取行动了,响应。

更进一步:伴随着这个通知:很多事件在发生的时候,会产生一些与事件本身相关的数据,一般称为消息。比如不同的消息(短信,微信,QQ,电话)手机有不同的铃声。Csharp中称为事件参数:EventArgs。当手机的关注者被通知以后,被通知者就会去检查这个消息参数signal(事件参数)。然后关注者根据事件参数的内容,来采取相应的行动。如果发现是一个不重要消息可以晚一会看,如果是一个电话,就要考虑是否及时接起,如果是一个紧急任务,就要立即处理。微软(C#厂家)把根据通知和事件参数来采取行动的行为称为响应事件(处理事件):事件处理器:EventHandler

有一类事件:发生的时候只管通知,没有事件参数。红灯亮了要停车;大楼里面火警响了,大家都往外跑,只管通知,不需要事件参数。无须额外的消息,事件发生的本身,就足以说明一切了。

事件这种成员的功能:= 通知别的对象或者类 + 同时传递可选的事件参数(即详细信息)/信号signals


使用:

内容决定形式,功能决定使用方法。

事件用于对象或类间的动作协调信息传递(消息推送)。

 如果说一个对象拥有一个事件:意思是说,这个对象,可以通过它的这个事件来通知别的对象。事件一发生,关心关注这个事件的对象们(主体们)就会被依次的通知到。结果:关心着这个事件的对象们纷纷作出响应,于是这些对象就协调统一的工作起来了。


原理:

事件模型(event model)发生-响应模型

在这个事件模型中隐藏着两个“五”:

  • 发生→响应中的5个部分——事件模型在构建时的五个组成部分:
    • 举例1:闹钟响了你起床:闹钟、响铃、你、起床;四个部分。
    • 举例2:孩子饿了你做饭:孩子、饿了、你、做饭;四个部分。
    • 之所以说5个部分:因为这里隐含了“订阅”关系。也就是前文中始终加粗的关注这个部分。必须是被通知者关注或者关心某个事件,也就说必须建立起链接或者联系
    • 这也就是说,别人的闹钟响了你不用起床,别人的孩子饿了,不用你做饭。但是当别人的孩子委托让你照顾时,或者别人的闹钟跟你一个目的时,这个联系建立起来了,你“订阅”了这个事件。
  • 发生→响应中的5个动作——事件模型在构建时的五个步骤:
    • 1、我要有一个事件→2、一个人或者一群人关心我的这个事件“订阅”→3、我的这个事件发生了→4、关心这个事件的人会被依次(按照订阅顺序)通知到→5、被通知到的人根据拿到的事件信息(又称“事件数据”、“事件参数”、“通知”、signals)对事件进行响应(又称“处理事件”)。

名称梳理:

事件的订阅者、事件消息的接收者、事件的响应者、事件的处理者、被事件所通知的对象:五个都是同一回事。

事件信息、事件消息、事件数据、事件参数:四个也都是同一回事。


提示:

  • 事件这种成员主要应用于开发桌面、手机、Web客户端程序:因为这些程序经常是用户通过事件来“驱动”的。
  • 各种编程语言对这个机制的实现方法不尽相同。
  • Java语言里没有事件这种成员,也没有委托这种类型。Java的“事件”是使用接口来实现的。
  • MVC、MVP、MVVM等模式,是事件模式更高级、更有效的“玩法”。
  • 日常开发的时候,使用已有事件的机会比较多,自己声明事件的机会比较少,所以先学使用。

回忆了一下之前学习的PyQt中的Signal and slot。Qt通过信号与槽来实现事件驱动机制。



传送门:

第一部分:C#学习笔记(十四)事件(一)通知

第二部分:C#学习笔记(十五)事件(二)事件模型

第三部分:C#学习笔记(十六)事件(三)自定义事件+事件不是委托

第四部分:C#学习笔记(十七)事件(四)事件个人总结

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值