標籤:
我們用一個簡單的例子,來說明一下這種訊息傳遞的機制。
有一家三口,媽媽負責做飯,爸爸和孩子負責吃。。。將這三個人,想象成三個類。
媽媽有一個方法,叫做“做飯”。有一個事件,叫做“開飯”。做完飯後,調用開發事件,發布開飯訊息。
爸爸和孩子分別有一個方法,叫做“吃飯”。
將爸爸和孩子的“吃飯”方法,註冊到媽媽的“開飯”事件。也就是,訂閱媽媽的開飯訊息。讓媽媽做完飯開飯時,發布吃飯訊息時,告訴爸爸和孩子一聲。
這種機制就是C#中的,訂閱發布。下面我們用代碼實現:
1 class Program 2 { 3 public static void Main(string[] args) 4 { 5 //執行個體化對象 6 Mom mom = new Mom(); 7 Dad dad = new Dad(); 8 Child child = new Child(); 9 10 //將爸爸和孩子的Eat方法註冊到媽媽的Eat事件11 //訂閱媽媽開飯的訊息12 mom.Eat += dad.Eat;13 mom.Eat += child.Eat;14 15 //調用媽媽的Cook事件16 mom.Cook();17 18 Console.Write("Press any key to continue . . . ");19 Console.ReadKey(true);20 }21 }22 23 public class Mom24 {25 //定義Eat事件,用於發布吃飯訊息26 public event Action Eat;27 28 public void Cook()29 {30 Console.WriteLine("媽媽 : 飯好了");31 //飯好了,發布吃飯訊息32 Eat();33 }34 }35 36 public class Dad37 {38 public void Eat()39 {40 //爸爸去吃飯41 Console.WriteLine("爸爸 : 吃飯了。");42 }43 }44 45 public class Child46 {47 public void Eat()48 {49 //熊孩子LOL呢,打完再吃50 Console.WriteLine("孩子 : 打完這局再吃。");51 }52 }
運行結果:
當爺爺奶奶來做客了怎麼辦呢?和爸爸孩子一樣,寫個Eat方法,同樣註冊到媽媽的開飯事件就好了。
C#中的事件-訂閱與發布