C# 事件机制
来源:互联网 发布:网络教育的考试 编辑:程序博客网 时间:2024/06/06 09:03
在所有关于C#事件机制的介绍中,我更倾向于发布者/订阅者(Publisher/Subscriber)这种描述。理解事件机制并不是一件容易的事情,它所涉及的思想值得我们好好去研究。
本文资源来自《C#与.NET技术平台实战演练》——中国青年出版社
谈到事件,我们涉及到两个角色:事件发布者(Publisher)和事件订阅者(Scriber),也可以说是事件发送者(Sender)和事件接收者(Receiver)的关系。举个例子来说,市面上目前有许多杂志,杂志的种类也很多。而我只对其中的某些感兴趣,那么我就可以向杂志发行商提出订阅。之后,每当杂志发行时,我就会收到我在杂志发行商那儿订阅的杂志。在这个关系中,杂志发行商就相当于事件发行者,而我就是事件订阅者。每当杂志发行时,就触发了一个发行事件。
用面向对象的语言解释,这两者的意义如下:
事件发行者(Publisher)
它是一个对象,且会维护自身的状态信息。每当状态信息发生变动时,便触发一个事件,并通知所有的事件订阅者。对于杂志发行商来说,每本杂志都有自己的信息在里面,当杂志发行时,我要通知订阅该杂志的人:杂志已经发行啦,请注意查收!
事件接收者(Receiver)
这个对象要注册它感兴趣的对象,也就是订阅它自己喜欢的杂志啦。另外,这个对象通常要提供一个事件处理方法,在事件发行者触发一个事件后,会自动执行这个方法。对于上面所举的例子来说,也就是我收到杂志后要做什么事情,比如,你可以满世界地大喊:我收到杂志啦!也可以将杂志收藏起来慢慢欣赏,具体怎么实现完全取决你自己的喜好。
以下是.NET事件处理机制的模型:
using
11
12
13
14
15
16
17
18
19
20
21
22
24
25
26
27
28
29
31
34
35
37
38}
在这个例子中,Employee类相当于一个事件发布者(Publisher),它定义了事件的相关信息,包括定义了一个事件用于计算薪水(OnSalaryCompute),以及一个触发事件的函数(FireEvent()),为简单起见,本例没有加上事件参数。
与之相对应,HumanResource类则相当于一个事件订阅者(Subscriber),它定义了一个事件处理函数(SalaryHandler()),并用+=将其与事件联系起来,从而使事件触发的时候能够调用我这个方法(在本例中也就是打印一行字啦)。值得注意的一点是,事件处理函数的方法签名要与代理的方法签名相同,这是非常重要的一点。
下面将这个例子改造一下,事件参数信息,用以完善事件机制。
using
10
12
13
14
15
16
17
18
19
20
21
22
23
24
25
28
30
31
32
34
35
36
37
38
39
41
44
45
47
48
49
50
51
52
53}
54这个例子很有意思,它一秒钟自动触发事件一次,比上一个例子更能解释事件的机制,对吧?在这个例子中,我们要注意的一个地方就是事件处理函数的签名要和代理的签名一致
转自:http://www.cnblogs.com/donghaiyiyu/archive/2007/07/29/828738.html
- C# 事件机制
- Android 事件分发机制
- C#事件处理机制
- Flash AS3 学习12 - 事件处理机制
- 3.7 event.c:“事件”机制
- C 语言中 标识符的使用机制
- C#事件机制归纳(上)
- C#事件机制归纳(下)
- C#事件机制及响应方法
- C#事件机制归纳(上)
- C#事件机制归纳(下)
- C#事件机制归纳(上)
- 屏幕的双击事件(如在table c…
- C++ static_cast
- 事件机制
- 事件机制
- 事件机制
- 事件机制
- 关于WCF契约继承中层级关系在客户…
- WCF开发之服务契约
- WCF 回调的使用
- WCF 回调原理
- 有时候真想走到你面前对你来一句:fuck you mother。
- C# 事件机制
- 在连接到SQL Server2005时,在…
- SQLite3数据库操作: 建库,建…
- .Net中对Sqlite数据库操作封装类
- ORM框架类型自动转换原理
- Access2003 数据库中关于时间…
- 使用OleDbParameter来操作Access数…
- C# 引用类型作为函数参数时
- WCF for _NET CF快速入门