发布器(publisher) 是一个包含事件和委托定义的对象。事件和委托之间的联系也定义在这个对象中。发布器(publisher)类的对象调用这个事件,并通知其他的对象。
订阅器(subscriber) 是一个接受事件并提供事件处理程序的对象。在发布器(publisher)类中的委托调用订阅器(subscriber)类中的方法(事件处理程序)。
/// <summary> /// 抽象类 /// </summary> public abstract class EatFood { private Mom mom; public EatFood(Mom _mom) { mom = _mom; mom.Eat += Mom_Eat; } public abstract void Mom_Eat(); } /// <summary> /// 发布者 /// </summary> public class Mom { //定义Eat事件,用于发布吃饭消息 public event Action Eat; public void Cook() { Console.WriteLine("妈妈 : 饭好了"); //饭好了,发布吃饭消息 Eat?.Invoke(); } } /// <summary> /// 订阅者 /// </summary> public class Dad : EatFood { public Dad(Mom mom) : base(mom) { //爸爸去吃饭 Console.WriteLine("爸爸订阅了妈妈煮好饭的消息"); } public override void Mom_Eat() { //爸爸去吃饭 Console.WriteLine("爸爸 : 吃饭了。"); } } /// <summary> /// 订阅者 /// </summary> public class Child : EatFood { public Child(Mom mom) : base(mom) { //爸爸去吃饭 Console.WriteLine("孩子订阅了妈妈煮好饭的消息"); } public override void Mom_Eat() { //熊孩子LOL呢,打完再吃 Console.WriteLine("孩子 : 打完这局再吃。"); } }
Mom mom = new Mom();
Dad dad = new Dad(mom);
Child child = new Child(mom);
mom.Cook();