C#事件支持发布者/订阅者模式,发布者将事件通知给订阅者,而订阅者在事件发生时调用已经注册好的事件处理函数。
首先要在一个类中定义某种类型的委托和此种委托类型事件。然后在该类中通过一个函数,将该事件进行触发。 当外部其他类有对该事件订阅时候,其他类会转去处理该事件的处理程序。从而完成信息的交流。这样做,一个最大的好处就是事件触发类不用关心该事件的所有处理程序,只关心他自己的工作以及他所关心的事件即可。而对该事件感兴趣的类会首先订阅该事件,当该事件发生时会捕捉到事件信息,并转去处理。
举一个简单的例子 有两个类,机器mechine类,和维修工check类。mechine类在运行过程当中如果出现某种故障,他会抛出brokendown()信息。如果check类对该事件有订阅,他会捕捉到该信息然后转去心相应的处理程序。
using System;
class Mechine //定义一个发布者类
{ public delegate void delegateName(string name); //定义具有某种返回类型命令参数代理类型public event delegateName eventName; //定义委托类型的事件public void Fun(){ if (eventName != null) //如果事件不等于空就是说有订阅者注册过该事件,也就是说触发事件后有相应的事件处理函数被调用。 { Console.WriteLine("报告,机器已经出现故障"); eventName(string _name); //在类中触发该事件 }}}class Check //有订阅上述事件的类
{ public void Fix(string str){ Console.WriteLine("请让"+str+"去进行修理");}}
class Program
{ static void Main(){ Mechine mechine1 = new Mechine(); //实例化一个Mechine类 Check c1 = new Check(); mechine1.eventName += new Mechine.delegateName(c1.Fix); //用当前类中Fix函数订阅mechine类中eventName函数,注意这里Fix的函数结构要跟事件和代理的委托要相同(形参以及返回值全部相同),这样当Mechine类中事件触发时,系统会通知Check类转到Fix函数。Mechine.Fun("张三");
}}具体使用方法过程如下:1.委托定义delegate 2.事件定义 event 3.事件触发4.事件订阅以及处理