咱們用一個簡單的例子,來講明一下這種消息傳遞的機制。spa
有一家三口,媽媽負責作飯,爸爸和孩子負責吃。。。將這三我的,想象成三個類。code
媽媽有一個方法,叫作「作飯」。有一個事件,叫作「開飯」。作完飯後,調用開發事件,發佈開飯消息。對象
爸爸和孩子分別有一個方法,叫作「吃飯」。blog
將爸爸和孩子的「吃飯」方法,註冊到媽媽的「開飯」事件。也就是,訂閱媽媽的開飯消息。讓媽媽作完飯開飯時,發佈吃飯消息時,告訴爸爸和孩子一聲。事件
這種機制就是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 Mom 24 { 25 //定義Eat事件,用於發佈吃飯消息 26 public event Action Eat; 27 28 public void Cook() 29 { 30 Console.WriteLine("媽媽 : 飯好了"); 31 //飯好了,發佈吃飯消息 32 Eat?.Invoke(); 33 } 34 } 35 36 public class Dad 37 { 38 public void Eat() 39 { 40 //爸爸去吃飯 41 Console.WriteLine("爸爸 : 吃飯了。"); 42 } 43 } 44 45 public class Child 46 { 47 public void Eat() 48 { 49 //熊孩子LOL呢,打完再吃 50 Console.WriteLine("孩子 : 打完這局再吃。"); 51 } 52 }
運行結果:string
當爺爺奶奶來作客了怎麼辦呢?和爸爸孩子同樣,寫個Eat方法,一樣註冊到媽媽的開飯事件就行了。it