C 委託和事件,簡單示例說明問題

2021-09-08 14:16:20 字數 1553 閱讀 8674

先看看示例效果

按照國際慣例,得先說說概念。

委託(c# 程式設計指南)

事件(c# 程式設計指南)

以上內容來自msdn。

委託原始碼

概念和**都有了。剩下的就是應用了,要是只知道概念不會用,那還是等於不會。

要用委託首先要明確幾個問題:

1、為什麼需要委託?什麼場合用?

2、怎麼使用? 

委託的使用也是比較容易的。

1)、定義委託

2)、宣告委託物件

3)、例項化委託

4)、呼叫委託(執行方法)

來點實際的**,多執行緒中訪問 ui 控制項:

public delegate void updatetexteventhandler(string strtext); // 1、定義委託型別

public updatetexteventhandler updatetext; // 2、宣告委託物件public frmmain()

private void onupdatetext(string strtext)

private void btnthreadoperatecontrol_click(object sender, eventargs e)

}).start();

}

以上**比較簡單,但可以解決一些基本的多執行緒訪問控制項問題。現實場景有:後台多執行緒操作業務,列印操作日誌到主介面text框。後台採集資料,更新到主介面chart。

當然,委託作為c#的乙個很核心的東西,遠不止這些內容。有多播委託,將委託作為函式引數進行封裝等。

委託類似:c/c++中的函式指標封裝版,mfc/c++builder中的postmessage/sendmessage封裝版,qt中的訊號槽。

一道華麗的分割線

使用事件也要弄清楚幾個問題

1、為什麼使用委託?什麼場合用?

事件是對多播委託的乙個封裝,主要是限制誰發布事件,誰觸發。比如自己定義乙個類,類裡面有個事件,那麼只能你來觸發,響應在別人那邊。事件多用於ui操作,但不代表非ui不可以使用。窗體程式將這一點體現的淋漓盡致。

2、怎麼使用?

事件的使用也是比較容易的。

1、由於事件是基於委託的,那麼你得先定義乙個委託型別

2、宣告委託物件,並用event關鍵字修飾

3、在宣告事件的類內部使用(誰宣告的,誰觸發)

4、在宣告事件的類的外部繫結(沒有宣告的,那你就來訂閱(繫結 +=)事件)

來點實際**:

using system;

namespace eventdemo

static void test()

}class class1}}

個人經驗分享2句話區分委託和事件:

1、委託一般是自己宣告,別人呼叫。

2、事件是自己宣告,自己呼叫,但是響應在別人那邊。

看完了這些,不要以為你就會使用委託和事件,只能說明你看了我的文章,謝謝。

demo

C 委託事件簡單示例

使用c 語言進行編寫 設計乙個戰士物件基礎防禦為50,基礎經驗值0,每間隔3秒 時間可以調整 經驗會提公升10,當經驗到到達100時公升級,公升級時自己基礎防禦力提公升 0.5,友軍 防禦是40 提公升 0.1,敵人 防禦是30 會下降 0.2,使用事件委託的概念完成公升級時的需求。戰士類 publ...

事件和委託示例

1 timer的elapsed事件 using system using system.collections.generic using system.linq using system.text using system.timers namespace timer的elapsed事件 e.si...

C 委託和事件的使用示例

一 委託 使用委託時要先例項化,和類一樣,使用new關鍵字產生委託的新例項,然後將乙個或者多個與委託簽名匹配的方法與委託例項關聯。隨後呼叫委託時,就會呼叫所有與委託例項關聯的方法。與委託關聯可以是任何類或者結構中的方法,可以是靜態方法,只要是可以訪問的方法都可以。1.建立乙個委託型別使用關鍵字del...