最近工作需要封装一些自定义事件,对这块不熟悉所以查资料查到这篇文章,果然还是代码加注释最好懂啊(说这话的绝对都是程序员!!!一辈子的!!!)。
关于事件各位应该都不陌生,相信每个程序员都可以拍着胸脯说“事件?我知道啊~”,可如何自定义事件?也许有人心中就不是那么底气十足了。还是老规矩吧,高手绕行~
用很多地方都被引用到泛滥的一个例子来写吧,始作俑者就不去深究了。描述是这样的:小偷进入时,事件发送者(猫)发送猫叫事件(自定义),(事件接收者)主人订阅猫叫事件并处理(抓住小偷),事件的参数传递的是小偷的数量。
下面就给出实现的具体步骤---已经在代码注释中标明,以供各位博友抽象出自定义事件的流程。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 自定义事件 { //http://www.cnblogs.com/DebugLZQ //自定义事件步骤的示例代码 //0.定义事件传递的参数 class AlarmEventArgs : EventArgs { public int numberOfThief; public AlarmEventArgs(int n) { numberOfThief = n; } } //事件的发出者 class Dog { //1.声明事件的委托 public delegate void AlarmEventHandler(Object sender, AlarmEventArgs e); //2.声明事件 public event AlarmEventHandler Alarm; //3.引发事件的函数 public void OnAlarm(AlarmEventArgs e) { if (this.Alarm != null) { Console.WriteLine("The dog is Wangwang..."); this.Alarm(this, e); } } } //事件的订阅者 class Host { //4.订阅事件 public Host(Dog dog) { dog.Alarm += new Dog.AlarmEventHandler(HostHandleEvent); } //5.事件处理程序 public void HostHandleEvent(Object sender, AlarmEventArgs e) { Console.WriteLine("Host caught the thief! The sum is "+e.numberOfThief); } } class Program { static void Main(string[] args) { Console.WriteLine("Program is running..."); Dog dog = new Dog(); Host host = new Host(dog); Console.WriteLine("Someone is coming..."); //6.在合适的时候引发事件 AlarmEventArgs alarmEventArgs = new AlarmEventArgs(3); dog.OnAlarm(alarmEventArgs); Console.ReadKey(); } } }
程序运行结果如下:
注释很完善,就是猫啊狗啊什么的原作者有点分不清楚- -。
封装什么的,好是好,就是各种大工作量啊。封装事件,封装异常,封装对象。