C#中的事件-訂閱與發佈

  咱們用一個簡單的例子,來講明一下這種消息傳遞的機制。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

相關文章
相關標籤/搜索