C# 事件委託

來源:互聯網
上載者:User

標籤: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# 事件委託

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.