標籤:span text 函數 eve 有趣的 思路 產生 box 程式
看到百度上有關事件委託的通俗易懂的講解,覺得解釋的不錯,照搬過來以溫習之用。
問題: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將自己的方法綁定到這個事件上來,即可。
摘自:
https://zhidao.baidu.com/question/1573655955150837900.html?qbl=relate_question_1&word=eventhandler
C# 事件委託