C# 事件委託

看到百度上有關事件委託的通俗易懂的講解,以爲解釋的不錯,照搬過來以溫習之用。html

問題:c# 事件的含義到底是什麼(剛學習到委託的菜鳥提問)

在沒有學習委託以前,以爲事件就是單擊一個按鈕、雙擊一個按鈕等動做或者行爲(事件是動做或行爲)。
後來又以爲:單擊一個按鈕、雙擊一個按鈕僅僅是動做(或行爲),這些動做行爲自己不是事件,可是這些動做行爲卻能觸發相應的事件。
如今:學習了委託與事件以後,又知道事件只是委託的一個實例,它是類的成員。

請問:這三種對事件的理解哪一種對啊?

我查閱相關資料:上面說:
事件有兩種不一樣的含義:第一:表示發生了某個有趣的事情,第二:表示C#語言中已定義的一個對象。
還有人說:
從機制上講,事件就是你幹了什麼,你點擊了一個button,選擇了一個下拉菜單,點擊關閉按鈕。那麼這個時候程序該怎麼反應呢?這就看你的事件(或者說動做)有誰關心和誰關聯。
在實現上,c#是用委託作的,事件是一個特殊的委託。
 

回答:

樓主的疑問和我當初很像,你努力的想弄明白什麼是委託,你也從側面瞭解到委託很重要,可是你並不知道委託具體是用來幹什麼的因此你才疑惑。
考慮一個問題,假設有兩個對象 A 和B,如今A想要知道B一個狀態(B_Staus)的變化,它立刻去執行一個動做(A_Action),用你如今的思路你該如何解決這個問題?
有三種思路,第一種,A設個定時器每隔一段時間就檢測B的狀態,可是這種方案缺陷太大,你要不停的檢測B的狀態,可能B一年纔回變一次,那就太浪費了。並且即便這樣實時性也很差,不能保證立刻檢測到變化。

第二種 是將 A本身傳遞給B,讓B發生變化後調用A的函數,可是這樣B就要對A產生依賴,假如又來個C也要監聽,那你還要改動B的代碼,很不便,並且B要知道全部A的信息,這也是一種潛在的隱患。

第三種,就是隻將A須要執行的A_Action函數傳遞過去,B發生變化以後自動執行這個函數,那就須要有一種傳遞函數的方案,這就是委託。

委託去定義一個函數的簽名,所謂簽名就是這個這個函數接收什麼參數,返回什麼參數,分別都是什麼類型的。而後B 產生一個這個委託的實例,這就是事件。A或者C將本身的方法綁定到這個事件上來,便可。

  摘自:c#

  https://zhidao.baidu.com/question/1573655955150837900.html?qbl=relate_question_1&word=eventhandler函數

相關文章
相關標籤/搜索