1. 程式人生 > 程式設計 >C#事件訂閱釋出實現原理詳解

C#事件訂閱釋出實現原理詳解

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

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

  媽媽有一個方法,叫做“做飯”。有一個事件,叫做“開飯”。做完飯後,呼叫開發事件,釋出開飯訊息。

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

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

  這種機制就是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("孩子 : 打完這局再吃。");
    }
  }

  執行結果:

C#事件訂閱釋出實現原理詳解

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。