在讲之前我们先来看看.Net Framework的编码规范:
一、委托类型的名称都应该以EventHandler结束。
二、委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一
个 EventArgs类型(或继承自EventArgs)。
三、事件的命名为委托去掉 EventHandler之后剩余的部分。
四、继承自EventArgs的类型应该以EventArgs结尾。
这就是微软编码的规范,当然这不仅仅是规则,而是在这种规则下使程序有更大的灵活
性。
例子:您是不是不是有过不去上早自习的经历,还叫朋友如果辅导员点到就发个信息通
知你。下面我就就以不去早自习,睡懒觉,叫班长如果辅导员点到就通知我说辅导员来
点到了,如果没来就发个信息说不用来了继续睡,辅导员没来。
==========================================================================
// 观察者(也就是事件的订阅者)感兴趣的内容(EventArgs的继承类) ///<summary> /// 事件订阅者想要发布者传达的信息 ///</summary> class InformMessageEventArgs : EventArgs { private string message; public string Message { get { return message; } } public InformMessageEventArgs() { } public InformMessageEventArgs(string message) { this.message = message; } } // 观察者(也就是事件订阅者)小明 class XiaoMingPhone { // 感兴趣的事,就是今辅导员早自习来没来点到 public void Display(object sender, InformMessageEventArgs e) { Console.WriteLine(e.Message); } } // 事件的发布者 class Monitor { // 声明一个委托 public delegate void SendMessageEventHandler(object sender, InformMessageEventArgs e); // 声明一个事件,辅导员点到事件 public event SendMessageEventHandler morningExercise; protected virtual void isAdd(InformMessageEventArgs e) { if (morningExercise != null) { morningExercise(this, e); } } // 如果辅导员点到了就会调用这个方法触发事件(给小明发信息) public void send(InformMessageEventArgs e) { isAdd(e); } } // 测试程序 class Program { // 实例化一个小明 XiaoMingPhone xmp; // 实例化一个班长 Monitor m; public Program() { xmp = new XiaoMingPhone(); m = new Monitor(); //在班长那里注册一个通知事件(这一步实现事件发送者和事件接收者的关联) m.morningExercise +=new Monitor.SendMessageEventHandler(xmp.Display); init(); } static void Main(string[] args) { new Program(); } ///<summary> /// .send()方法就是用来触发通知事件的 ///</summary> private void init() { // 班长一看辅导员点到了,触发了注册的通知事件。赶紧告诉小明辅导员来了 string fudaoyuan = "点到"; Console.WriteLine("星期一早自习"); if (fudaoyuan == "点到") { m.send(new InformMessageEventArgs("今天早上辅导员来点到了,你被记名了")); } // 班长一看辅导员没来点到,同样也触发了注册的通知事件。告诉小明继续睡辅导员没来 fudaoyuan = "没来"; Console.WriteLine("星期二早自习"); if (fudaoyuan == "没来") { m.send(new InformMessageEventArgs("辅导员早上没来,你继续睡吧")); } Console.ReadKey(); } }