C#事件訂閱釋出實現原理詳解
阿新 • • 發佈:2020-12-03
我們用一個簡單的例子,來說明一下這種訊息傳遞的機制。
有一家三口,媽媽負責做飯,爸爸和孩子負責吃。。。將這三個人,想象成三個類。
媽媽有一個方法,叫做“做飯”。有一個事件,叫做“開飯”。做完飯後,呼叫開發事件,釋出開飯訊息。
爸爸和孩子分別有一個方法,叫做“吃飯”。
將爸爸和孩子的“吃飯”方法,註冊到媽媽的“開飯”事件。也就是,訂閱媽媽的開飯訊息。讓媽媽做完飯開飯時,釋出吃飯訊息時,告訴爸爸和孩子一聲。
這種機制就是C#中的,訂閱釋出。下面我們用程式碼實現:
class Program { public static void Main(string[] args) { //例項化物件 Mom mom = new Mom(); Dad dad = new Dad(); Child child = new Child(); //將爸爸和孩子的Eat方法註冊到媽媽的Eat事件 //訂閱媽媽開飯的訊息 mom.Eat += dad.Eat; mom.Eat += child.Eat; //呼叫媽媽的Cook事件 mom.Cook(); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } public class Mom { //定義Eat事件,用於釋出吃飯訊息 public event Action Eat; public void Cook() { Console.WriteLine("媽媽 : 飯好了"); //飯好了,釋出吃飯訊息 Eat?.Invoke(); } } public class Dad { public void Eat() { //爸爸去吃飯 Console.WriteLine("爸爸 : 吃飯了。"); } } public class Child { public void Eat() { //熊孩子LOL呢,打完再吃 Console.WriteLine("孩子 : 打完這局再吃。"); } }
執行結果:
當爺爺奶奶來做客了怎麼辦呢?和爸爸孩子一樣,寫個Eat方法,同樣註冊到媽媽的開飯事件就好了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。