- 了解事件
- 事件的应用
- 深入理解事件
- 事件的声明
- 问题辨明
认识事件
事件是应用程序在执行过程中所关注的一些动作,但这些动作发生时,程序需要对其做出响应。事件的概念比较广泛,所有程序需要进行响应处理的动作都可以称为事件。如鼠标单击、键盘输入、计时器消息...
事件基于委托,为委托提供了一种发布/订阅机制,在.NET架构内外都可以看到事件。在Windows应用程序中,Button类提供了Click事件。这类事件就是委托,触发Click
事件调用的处理程序需要得到定义,而其参数由委托类型定义。
事件机制是以消息为基础的,当特定的动作发生后会产生相应的消息,关注该事件的应用程序收到事件发生的消息,就会开始指定处理过程。
产生事件的类称为事件触发类,而处理事件的类则称为事件的接受类,用于处理特定事件的方法称为事件的处理方法。
事件的解释
Event 在《牛津词典》的解释是"a thing that happens, especially something important",表示能够发生的什么事情。
事件在C#中的角色,表示使对象或类具备通知能力的成员。
An event is a member that entables an object or class to provide notifications
- 事件是一种使对象或类能够提供通知能力的成员
- “对象拥有一个事件”表达的思想是“当事件发生的时候,对象有能力通知其他的对象。”。
事件的使用
用于对象或类间的动作协调与信息传递,如消息推送。
事件的原理
发布者和订阅者
很多程序都有一个共同的需求,即当一个特定的程序事件发生时,程序的其他部分可以得到该事件已经发生的通知。
发布者/订阅者模式(publisher/subscriber pattern)可以满足这种需求,在这种模式中,发布者类定义了一系列程序的其他部分可能感兴趣的事件。其他类可以注册,以便在这些事件发生时发布者可以通知它们。这些订阅者类通过向发布者提供一个方法来注册以获取通知。当事件发生时,发布者触发事件,然后执行订阅者提交的所有事件。
由订阅者提供的方法称为回调方法,因为发布者通过执行这些方法来“往回调用订阅者的方法”,还可将它们称为事件处理程序,因为它们是为处理事件而调用的代码。
事件的相关概念
- 发布者(publisher) 发布某个事件的类或结构,其他类可以在该事件发生时得到通知。
- 订阅者(subscriber)注册在事件发生时得到通知的类或结构
- 事件处理程序(event handler) 由订阅者注册到事件的方法,在发布者触发事件时执行。事件处理程序方法可以定义在事件所在的类或结构中,也可以定义在不同的类或结构中。
- 触发(raise)事件/调用(invoke)事件/触发(fire)事件 当事件触发时,所有注册到它的方法都回被依次调用。
事件很多部分与委托相似,实际上,事件就像是专门用于某种特殊用途的简单委托。委托和事件的行为之所以相似,是由充分理由的。事件包含了一个私有的委托。
事件模型Event Model
有两个5
发生至响应中的五个部分
发生至响应的五个部分中,隐含着订阅关系。
很多程序都有一个共同的需求,即当一个特定的程序事件发生时,程序的其他部分可以得到该事件已经发生的通知。发生至响应中的五个动作
事件的应用
- 事件多用于桌面、手机等开发的客户端编程,因为这些程序经常是用户通过事件来驱动的。
- 各种编程语言对事件机制的实现方式不尽相同
- Java中没有事件这种成员,也没有委托这种数据类型。Java的事件是使用接口来实现的。
- MVC、MVP、MVVM等模式是事件模式更加高级更加有效的玩法
- 日常开发中,使用已有的事件的机会较多,自己声明事件的机会较少。