(C#) 用委派推送事件

Jason
Sep 19, 2022

還記得上次有跟大家分享委派的應用,並且在文章的尾段有提到,委派常拿來與事件一起應用,所以今天就來跟大家分享一下這又是怎麼回事。

委派與事件的結合應用,其實就是透過委派來傳遞某個被觸發的事件,也就是說當程式某個事件被觸發後,就透過委派的方式來傳遞這個被觸發的事件,讓其他人知道事件已被觸發。

一樣用上次餐廳點餐的例子,當服務生幫你點完餐後,理所當然的會去忙其他事情,或是去服務其他桌的客人,然後當你的餐點做好了,廚房的人可能就會用敲鈴的方式讓服務生知道你的餐點可以出餐了。所以此時這個鈴聲,就是一個可以出餐的事件,當這個事件被觸發後(鈴聲響了),服務生就會知道可以出餐了,而這個事件要如何傳遞到服務生的耳朵裡,那就是要透過委派的方式來做傳遞。

精美手繪圖解(誤)

如果上面的概念都沒問題,我們就可以寫Code來模擬一下上面的情境。首先會有兩個介面,一個是服務生,另一個是廚房。然後當廚房把餐都準備好之後,就會按下「Server Please!!」的按鈕當作通知服務生的鈴鐺,然後當按下鈴鐺後,服務生的介面就會出現「Server Please!!!」的訊息。

程式模擬介面

至於Code怎麼寫呢?很簡單就三個步驟而已:1. 建立委派 2.在所建立的委派上建立事件 3.觸發事件。所以Kitchen頁面的程式會如下:

Kitchen.cs

是不是很簡單!!!!不過如果對於委派的應用不熟悉的話,會建議看一下上一篇的介紹,這裡就不再贅述了。

接下來Waiter的部分也很簡單,一樣三個步驟,不過其他教學好像喜歡把他講得文謅謅,例如把他實體化出來,接著註冊事件…等等,在這裡我就白話一點。步驟一,餐廳要有廚房,所以理所當然的我們要建一個廚房。步驟二,定義接收到事件後,要做那些處理。步驟三,指定步驟二的方法,來去接收事件,所以整體程式碼會如下:

Waiter.cs

這裡我再針對第三步驟的的程式碼講解一下,首先「kitchen.InformWaiterEvent」,當中的「.InformWaiterEvent」就是我們剛才在Kitchen.cs裡基於委派上面所建立的事件,所以我們就只要在Waiter.cs裡把Kitchen建立出來後,我們就可以直接呼叫使用。接著後面 「+= Get_Kitchen_Message」,就是讓名為「Get_Kitchen_Message」的方法來去接收「InformWaiterEvent」的事件。

以上就是範例的所有程式碼,可以發現透過委派來推送事件並沒有想像中複雜,而且這種方式也相當實用,例如用於即時的介面刷新、監控使用者的操作行為等,所以自己真心認為是一個相當實用個一個小技巧。那今天的分享也就到這邊,如果上述有那裡概念不清楚,或是我有理解錯的地方,歡迎大家提出與交流。

--

--