对于C#中的事件,我举了个简单的例子来理解事件及其处理。
这个例子中母亲是事件的发布者,事件是吃饭了。儿子和父亲是事件的订阅者,各自的Eat方法是处理事件的方法。
下面是详细的加注的例子:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.IO; 7 8 9 /* C#中处理事件采用发布-订阅模型(publisher-subscriber model)10 * 包含委托和事件申明的类是发布器11 * 包含事件处理的类是订阅器12 * 13 * C#中申明事件以及事件处理的步骤:14 * 1.定义委托和其相关联的事件15 * 2.在发布器中写触发事件的条件(方法、其他事件等)16 * 3.在订阅器中写处理事件的方法程序17 * 4.将事件订阅处理事件的程序,格式是: <事件> += new <与事件关联的委托> ( <处理事件的方法名> ) 18 */19 namespace CsharpStudy20 {21 //定义一个“母亲”类,是发布器22 class Mum {23 //与事件关联的委托的定义24 public delegate void mydelegate();25 //事件的定义26 public event mydelegate EatEvent;27 28 public void Cook() {29 Console.WriteLine("母亲:我饭做好了,快来吃饭了...");30 //触发事件31 EatEvent();32 }33 34 }35 36 //定义一个“儿子”类,是订阅器37 class Son {38 //事件处理方法39 public void Eat() {40 Console.WriteLine("儿子:好,等会,妈,我玩完这局再吃...");41 }42 }43 44 //定义一个“父亲”类,是订阅器45 class Father {46 //事件处理方法47 public void Eat() {48 Console.WriteLine("父亲:好,老婆,我来吃饭了...");49 }50 }51 52 53 //主程序类54 class Program55 {56 //程序入口57 static void Main(string[] args)58 {59 /************Main function***************/60 //实例化三个类61 Mum mun = new Mum();62 Father father = new Father();63 Son son = new Son();64 65 //事件订阅方法(订阅son和father的Eat方法)66 mun.EatEvent += new Mum.mydelegate(son.Eat);67 mun.EatEvent += new Mum.mydelegate(father.Eat);68 69 mun.Cook();70 71 72 /****************************************/73 74 Console.ReadKey();75 }76 }77 78 79 } 处理事件的方法名> 与事件关联的委托> 事件>
虽然这个例子比较简单,但是能够最粗糙的对事件的发布-订阅模型有个最直观的理解。