《程序员的第一年》---------- c#自定义事件机制源码说明
2013-07-20 16:57
211 查看
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; //谈到事件,我们涉及到两个角色:事件发布者(Publisher)和事件订阅者(Scriber), //也可以说是事件发送者(Sender)和事件接收者(Receiver)的关系。举个例子来说, //市面上目前有许多杂志,杂志的种类也很多。而我只对其中的某些感兴趣, //那么我就可以向杂志发行商提出订阅。之后,每当杂志发行时, //我就会收到我在杂志发行商那儿订阅的杂志。在这个关系中, //杂志发行商就相当于事件发行者,而我就是事件订阅者。 //每当杂志发行时,就触发了一个发行事件。 //用面向对象的语言解释,这两者的意义如下: //事件发行者(Publisher) //它是一个对象,且会维护自身的状态信息。每当状态信息发生变动时, //便触发一个事件,并通知所有的事件订阅者。对于杂志发行商来说, //每本杂志都有自己的信息在里面,当杂志发行时,我要通知订阅该杂志的人: //杂志已经发行啦,请注意查收! //事件接收者(Receiver) //这个对象要注册它感兴趣的对象,也就是订阅它自己喜欢的杂志啦。另外, //这个对象通常要提供一个事件处理方法,在事件发行者触发一个事件后, //会自动执行这个方法。对于上面所举的例子来说,也就是我收到杂志后要做什么事情, //比如,你可以满世界地大喊:我收到杂志啦!也可以将杂志收藏起来慢慢欣赏, //具体怎么实现完全取决你自己的喜好。 namespace 自定义事件 { //声明一个代理类 public delegate void SalaryCompute(object sender, MyEventArgs e); //事件发布者(Publisher) public class Event { //定义事件,将其与代理绑定 public event SalaryCompute OnSalaryCompute; //触发事件的方法 public virtual void FireEvent(MyEventArgs e) { if (OnSalaryCompute != null) { //触发事件 -------相当发新杂志 OnSalaryCompute(this, e); } } } //定义事件参数类 public class MyEventArgs : EventArgs { public readonly double _salary; public MyEventArgs(double salary) { this._salary = salary; } } //-------------------------- //事件接收者(Receiver) public class Program { //事件处理函数,其签名应与代码签名相同-------相当回应(我收到杂志啦) public void SalaryHandler(object sender,MyEventArgs e) { Console.WriteLine("Salary:{0}",e._salary); Console.Read(); } static void Main(string[] args) { Event et = new Event();//定义发布者 Program pm = new Program();//定义订阅者 MyEventArgs e = new MyEventArgs(123.14);//定义事件-----比如:发行杂志 et.OnSalaryCompute += new SalaryCompute(pm.SalaryHandler); //注册-----订阅者订阅杂志 for ( ; ; ) { Thread.Sleep(1000); et.FireEvent(e);//触发事件 -----发布者发行杂志,订阅者触发SalaryHandler方法回应(我收到杂志啦) } } } }
相关文章推荐
- 《程序员的第一年》---复习一下C#的【封装 多态 继承 -----简单计算器源码实例】
- 程序员手记:Java与C#的事件处理机制
- c#事件,委托机制 这个例子非常好哦.提供源码,.一下子就了解了,还推荐去看 皮特的故事 要学委托 事件的话,
- jquery源码初探-jquery写法优点以及事件机制说明
- 《程序员的第一年》---------- 复习一下C#的【封装 多态 继承 -----简单计算器源码实例】
- C#的事件机制。
- 从源码角度分析android事件分发处理机制
- 搜狐面试- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- Andriod 从源码的角度详解View,ViewGroup的Touch事件的分发机制
- 以WebBrowser.DocumentCompleted 事件为例,说明用C#如何完成事件的订阅处理。
- Android ViewGroup 触摸屏事件派发机制和源码分析
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- Android触摸屏事件派发机制详解与源码分析一(View篇)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- [cocos2dx]事件分发机制--lua源码(二)
- C#中的事件处理机制
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- QT源码之Qt信号槽机制与事件机制
- Android View 事件分发机制源码详解(ViewGroup篇)
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)