2023-05-01|閱讀時間 ‧ 約 5 分鐘

【中低階級】-事件(Event)、委派(Delegate)

  本篇要分享的是事件(Event)與委派(Delegate),這兩者時常都會綁再一起,怎麼說呢?我們先來各別了解什麼是Event?什麼是Delegate?他們都在做些什麼事呢?

一、事件(Event)

  事件(Event)是事情的發生、狀態的發生或改變,也可以說是對於這件事去「做通知」這個動作。好比說:有客人來會按門鈴,按下門鈴後就會有鈴聲響起,這就是一個事件。另外一個說法可以說「監聽」,門鈴等待著有緣人來按下它,等待著被觸發。
  那麼也有個用法就是「訂閱」,假若你訂閱了文章雜誌,那麼它更新的時候就會通知你,在程式中會使用「+=」或者「-=」來代表新增訂閱或者取消訂閱。
  還記得之前的例子,當我們建立一個button(或是其他工具箱裡的物件)快速點兩下進入寫程式的地方時,它就會幫我們先列出這一行的程式(如下)
private void button1_Click(object sender, EventArgs e)
這時button_Click它使用的是件處理器是EventHandler,該處理器就需要有兩個參數一個是名為sender的object、另一個是名為e的EventArgs,這兩個是沒有傳回值的。

怎麼知道處理器是EventHandler?
初始化組件
初始化組件
先看到Form1中有個InitializeComponent(初始化組件)進入看一下它的定義,從中找到button1區塊,可以看到button1.Click使用+=有去訂閱EventHandler這個處理器,也就是說當按下button1按鈕時,它就會觸發button1_Click,也就會去執行我們之前在此按鈕中寫下的程式內容。
主程式-按鈕觸發

二、委派(Delegate)

  也有人稱為「委託」,一件事件的發生一定會有傳送方和接收方,介於這兩者中間的媒介就是委派(Delegate)。也就是說客人(傳送方)按下門鈴後,經過門鈴內部的一些處理再去觸發讓鈴聲可以響起,使家人(接收方)聽到,這就是委派。另外一個比喻就是主管叫下屬做事情,就是委託下屬幫忙做事情,這也就是委派。

三、如何使用?看例子

Step1:建立主動方(傳送方)類別,例子:雜誌
Step2:建立被動方(接收方)類別,例子:訂閱者
Step3:主程式撰寫
主動方(傳送方)Class雜誌
被動方(接收方)Class訂閱者
主程式
說明: 【ClassMagazine類別】 1.先將第一步(紅色底線)先做宣告 (delegate是委派所以先做宣告,事件發生時對訂閱者做通知的內容。 event是事件因此再以委派的型別再去做事件項目的宣告也就是newArticle。 [也就是新的文章出來的時候,就會透過委派方式去通知訂閱者,告訴他們新的文章內容] ) 2.第二步(綠框)建立方法 (雜誌有一個方法就是新增文章,它有兩個參數也就是作者和文章內容,由於不確定是否有人訂閱,因此就要使用第三步來做判斷) 3.第三步(藍框)判斷是否有人訂閱 (若沒有人訂閱的話,那麼newArticle= null,因此當有人訂閱時才會去通知訂閱者,newArticle.Invoke()這一個Invoke參數指的就是一開始delegate所定義的參數,它會直接跑到訂閱者的那個類別方法去[也就是主程式的訂閱者的NotifyMe方法中去執行]) ※判斷是否有人訂閱這邊的名稱通常會在前面加上On為開頭 【ClassSubscriber類別】 1.這邊的宣告Name指的是訂閱者是誰,Msg就是顯示訊息 2.這邊有個方法是NotifyMe也就是通知我 (當有人訂閱了文章,執行了「雜誌類別」中的newArticle.Invoke()這一行,它就會跑進來這邊作執行,因為主程式的訂閱者使用的是NotifyMe方法,因此才會再執行的時候跑進來) 【主程式】 1.第一步(紅框)建立雜誌公司名為Kitty_Magazie 2.第二步(綠框)建立使用者名為Peggy、Anna 3.第三步(藍框)Peggy、Anna去訂閱Kitty_Magazie (他們訂閱了Kitty_Magazie後,當Kitty_Magazie新增文章時[雜誌類別做的事],它就會做通知的動作[訂閱者類別中的NotifyMe去做執行]) 4.那麼我們用label1用訊息文字來看一下執行狀況。
我們看一下執行結果:
執行結果
※建議自己操作一次,並且逐步執行了解一下他們之間的關聯會比較好理解哦~

參考資料: 1.C# 事件(Event) 2.[C#語法] 事件(Event)使用簡單三步 3.C# 事件(上) - 使用委派來實作事件 4.C# 事件(下) – 加上event關鍵字 5.C#事件(Event)
分享至
成為作者繼續創作的動力吧!
從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

作者的相關文章

橙果杏的沙龍 的其他內容

你可能也想看

發表回應

成為會員 後即可發表留言
© 2024 vocus All rights reserved.