事件委託釋出-訂閱
阿新 • • 發佈:2020-08-05
釋出器(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();