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

閱讀時間約 4 分鐘
  本篇要分享的是事件(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)
為什麼會看到廣告
avatar-img
21會員
43內容數
Hello~ Welcome to my blog~❤ 這邊會分享我在程式這條道路中的學習與成長, 過程中從而了解自己的不足,再學習。 希望透過分享的方式, 也讓正在學習程式的夥伴們一起學習, 我們一起加油吧~ 「彼此都會成為彼此之間的影響力」(´,,•ω•,,)♡ ❣
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
橙果杏的沙龍 的其他內容
  本篇要分享的內容包含Enum、Dictionary、Stack、Queue、IComparable<T>、IComparer<T>、CompareTo、Compare等等相關內容。它們與Array和List有些類似,都是資料集合存取或資料其他相關處理的部分,我們就來看一看它們是何方神聖吧~
  物件導向說到這邊其實修飾詞不只有之前所提的public、private這些,還有可能遇到抽象(abstract)、虛擬(virtual)、覆寫(override)、隱藏(new)、密封(sealed)、介面(interface)等等,我們就來看一下它們的差異吧~
三、多型(polymorphism)   多型就是在同事物下使用不同條件就可以表現出不同的形態。舉例來說:以「小貓」為例它會有不同的屬性,包括品種、名字、年齡等等,對於每一隻就會有不同的動作如:趴、走、坐、跑等等行為。那麼 .小貓就屬於「同一事物」 .品種、名字、年齡這些就屬於「不同條件」 .趴、走
二、繼承(inheritance) 繼承就是假如A(子)類別去繼承B(父)類別,那麼A(子)類別可以直接去使用B(父)類別非私有的屬性和方法,但是A(子)只能繼承一個B(父)類別ㄛ! 一樣的道理可以比喻為:爸爸跟小孩之間的關係。小孩可以去運用爸爸的資源,但是爸爸的工作屬於他自己的不能跟小孩一起分享,
,先來分享一下封裝是怎麼一回事。 一、封裝(Encapsulation) 封裝就是把一些功能的處理程序或是資料包起來,也對於程式碼做權限的設定做一層保護的機制,這是為了防止程式碼被竄改,所以有了封裝可以保障我們資料的隱密性,甚至封裝也是一種將一些處理程序隱藏起來,讓使用者使用時可以更加單純。 1.什
  物件導向(Object Oriented Programming,又稱OOP),在程式領域中很常會看到一些英文代稱,如果不懂的話就比較會不知道在說些什麼,所以除了知道中文名稱外也要稍微知道一下它的代稱是什麼會比較好唷! 一、什麼是物件導向?   把程式寫出來的功能集合成一個類別(class),接
  本篇要分享的內容包含Enum、Dictionary、Stack、Queue、IComparable<T>、IComparer<T>、CompareTo、Compare等等相關內容。它們與Array和List有些類似,都是資料集合存取或資料其他相關處理的部分,我們就來看一看它們是何方神聖吧~
  物件導向說到這邊其實修飾詞不只有之前所提的public、private這些,還有可能遇到抽象(abstract)、虛擬(virtual)、覆寫(override)、隱藏(new)、密封(sealed)、介面(interface)等等,我們就來看一下它們的差異吧~
三、多型(polymorphism)   多型就是在同事物下使用不同條件就可以表現出不同的形態。舉例來說:以「小貓」為例它會有不同的屬性,包括品種、名字、年齡等等,對於每一隻就會有不同的動作如:趴、走、坐、跑等等行為。那麼 .小貓就屬於「同一事物」 .品種、名字、年齡這些就屬於「不同條件」 .趴、走
二、繼承(inheritance) 繼承就是假如A(子)類別去繼承B(父)類別,那麼A(子)類別可以直接去使用B(父)類別非私有的屬性和方法,但是A(子)只能繼承一個B(父)類別ㄛ! 一樣的道理可以比喻為:爸爸跟小孩之間的關係。小孩可以去運用爸爸的資源,但是爸爸的工作屬於他自己的不能跟小孩一起分享,
,先來分享一下封裝是怎麼一回事。 一、封裝(Encapsulation) 封裝就是把一些功能的處理程序或是資料包起來,也對於程式碼做權限的設定做一層保護的機制,這是為了防止程式碼被竄改,所以有了封裝可以保障我們資料的隱密性,甚至封裝也是一種將一些處理程序隱藏起來,讓使用者使用時可以更加單純。 1.什
  物件導向(Object Oriented Programming,又稱OOP),在程式領域中很常會看到一些英文代稱,如果不懂的話就比較會不知道在說些什麼,所以除了知道中文名稱外也要稍微知道一下它的代稱是什麼會比較好唷! 一、什麼是物件導向?   把程式寫出來的功能集合成一個類別(class),接
你可能也想看
Google News 追蹤
Thumbnail
子組件可以使用 $emit 方法來發送自定義事件,父組件則使用 v-on 來監聽這些事件。事件參數可以通過 $emit 傳遞,並在父組件中使用內聯箭頭函數或方法接收。使用 defineEmits 可以顯式宣告事件並進行驗證,提升代碼可讀性和可維護性。
Thumbnail
設計功能             將整年份計畫事項,包含每月一次或每單月一次,每雙月一次之固定日期時,需要事先準備執行的事項,先一件一件記入在文字檔內,以便能該事件來臨前幾天,以LINE訊息自動發送出該事件內容給群組全員,讓全員可以事先接到通知,事先做好準備,才不會遺忘重要計畫事件     
※ 說明事件委派 (Event Delegation) ,背後的運作機制。 網頁元素接收事件的順序,流程有兩種個方向的傳遞: 由下而上的,稱為事件冒泡 (event bubbling) 由上而下的,稱為事件捕獲 (event capturing) ※ 事件冒泡 Event Bubbling
Thumbnail
組件之間的通信是 Vue 應用開發中的一個重要方面。Vue 提供了一種名為事件發射(emit)的機制,讓子組件能夠向父組件發送消息。本文將介紹 Vue 中的事件發射(emit)機制,並通過實際範例演示其用法。
凡是專案,就一定有啟動會議。 啟動會議最主要的目的是讓專案成員、利害關係人齊聚一堂、互相認識,瞭解專案的目標、工作大項、程和里程碑,最重要的是要爭取功能主管對專案的支持,能夠派出成員利用在原部門工作的時間來參與專案。 ERP專案的啟動會議有兩次。
Thumbnail
本篇討論專案經理收到任務後的基本動作,還有如何挖掘出簡報文字之下客戶真正想要的東西。
Thumbnail
關係的議題,在提醒我們, 你有絕對的主動權,去選擇讓關係成為一份禮物和祝福。
kick off meeting啟動會議是什麼?有什麼用?我們可以怎麼開展kick off meeting?跟著我們一起8步驟學會規劃啟動會議!通過不同類型的kick off meeting 範例分析進行學習,掌握啟動會議每一流程!更有高效會議規劃工具推薦,一鍵生成會議紀錄!
Thumbnail
公司沒有行銷公關部門,或是平常並未致力於媒體公關的維繫作業,臨時想舉辦記者會該從哪裡開始?記者會流程如何規劃,以及有哪些該注意的事項?隨著記者會的結束,如何延續話題讓記者會持續發揮更大效益?以上這些問題就讓我們今天為你一一解答,並和您分享舉辦一場成功記者會該有的關鍵流程。 為什麼需要舉辦記者會?如
Thumbnail
子組件可以使用 $emit 方法來發送自定義事件,父組件則使用 v-on 來監聽這些事件。事件參數可以通過 $emit 傳遞,並在父組件中使用內聯箭頭函數或方法接收。使用 defineEmits 可以顯式宣告事件並進行驗證,提升代碼可讀性和可維護性。
Thumbnail
設計功能             將整年份計畫事項,包含每月一次或每單月一次,每雙月一次之固定日期時,需要事先準備執行的事項,先一件一件記入在文字檔內,以便能該事件來臨前幾天,以LINE訊息自動發送出該事件內容給群組全員,讓全員可以事先接到通知,事先做好準備,才不會遺忘重要計畫事件     
※ 說明事件委派 (Event Delegation) ,背後的運作機制。 網頁元素接收事件的順序,流程有兩種個方向的傳遞: 由下而上的,稱為事件冒泡 (event bubbling) 由上而下的,稱為事件捕獲 (event capturing) ※ 事件冒泡 Event Bubbling
Thumbnail
組件之間的通信是 Vue 應用開發中的一個重要方面。Vue 提供了一種名為事件發射(emit)的機制,讓子組件能夠向父組件發送消息。本文將介紹 Vue 中的事件發射(emit)機制,並通過實際範例演示其用法。
凡是專案,就一定有啟動會議。 啟動會議最主要的目的是讓專案成員、利害關係人齊聚一堂、互相認識,瞭解專案的目標、工作大項、程和里程碑,最重要的是要爭取功能主管對專案的支持,能夠派出成員利用在原部門工作的時間來參與專案。 ERP專案的啟動會議有兩次。
Thumbnail
本篇討論專案經理收到任務後的基本動作,還有如何挖掘出簡報文字之下客戶真正想要的東西。
Thumbnail
關係的議題,在提醒我們, 你有絕對的主動權,去選擇讓關係成為一份禮物和祝福。
kick off meeting啟動會議是什麼?有什麼用?我們可以怎麼開展kick off meeting?跟著我們一起8步驟學會規劃啟動會議!通過不同類型的kick off meeting 範例分析進行學習,掌握啟動會議每一流程!更有高效會議規劃工具推薦,一鍵生成會議紀錄!
Thumbnail
公司沒有行銷公關部門,或是平常並未致力於媒體公關的維繫作業,臨時想舉辦記者會該從哪裡開始?記者會流程如何規劃,以及有哪些該注意的事項?隨著記者會的結束,如何延續話題讓記者會持續發揮更大效益?以上這些問題就讓我們今天為你一一解答,並和您分享舉辦一場成功記者會該有的關鍵流程。 為什麼需要舉辦記者會?如