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


  我們用一個簡單的例子,來說明一下這種消息傳遞的機制。

  有一家三口,媽媽負責做飯,爸爸和孩子負責吃。。。將這三個人,想象成三個類。

  媽媽有一個方法,叫做“做飯”。有一個事件,叫做“開飯”。做完飯后,調用開發事件,發布開飯消息。

  爸爸和孩子分別有一個方法,叫做“吃飯”。

  將爸爸和孩子的“吃飯”方法,注冊到媽媽的“開飯”事件。也就是,訂閱媽媽的開飯消息。讓媽媽做完飯開飯時,發布吃飯消息時,告訴爸爸和孩子一聲。

  這種機制就是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     }

  運行結果:

  當爺爺奶奶來做客了怎么辦呢?和爸爸孩子一樣,寫個Eat方法,同樣注冊到媽媽的開飯事件就好了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM