C 自學35一如何實現委託的步驟

2021-10-10 12:46:16 字數 1847 閱讀 8636

委託訂閱了這個事件,觀察者

例項化,圖紙

delegate

delegate是c#中的一種型別,它實際上是乙個能夠持有對某個方法的引用的類。與其它的類不同,delegate類能夠擁有乙個簽名(signature),並且它"只能持有與它的簽名相匹配的方法的引用"。

實現乙個delegate是很簡單的,通過以下3個步驟即可實現乙個delegate:

1. 宣告乙個delegate物件,它應當與你想要傳遞的方法具有相同的引數和返回值型別。

2. 建立delegate物件,並"將你想要傳遞的函式作為引數傳入"。

3. 在要實現非同步呼叫的地方,通過上一步建立的物件來呼叫方法。

using system;

public

class

mydelegatetest

public

static

void

main()

}輸出結果是:hello, sam1111

了解了delegate,下面我們來看看,在c#中對事件是如何處理的。

c#中的事件處理實際上是一種具有特殊簽名的delegate,象下面這個樣子:

public delegate void myeventhandler(object sender, myeventargs e);

其中的兩個引數,sender代表事件傳送者,e是事件引數類。myeventargs類用來包含與事件相關的資料,所有的事件引數類都必須從system.eventargs類派生。當然,如果你的事件不含引數,那麼可以直接用system.eventargs類作為引數。

就是這麼簡單,結合delegate的實現,我們可以將自定義事件的實現歸結為以下幾步:

1.定義delegate物件型別,它有兩個引數,第乙個引數是事件傳送者物件,第二個引數是事件引數類物件。

2.定義事件引數類,此類應當從system.eventargs類派生。如果事件不帶引數,這一步可以省略。

3.定義"事件處理方法,它應當與delegate物件具有相同的引數和返回值型別"。

4.用event關鍵字定義事件物件,它同時也是乙個delegate物件。

5.用+=操作符新增事件到事件佇列中(-=操作符能夠將事件從佇列中刪除)。

6.在需要觸發事件的地方用呼叫delegate的方式寫事件觸發方法。一般來說,此方法應為protected訪問限制,既不能以public方式呼叫,但可以被子類繼承。名字是oneventname。

7. 在適當的地方呼叫事件觸發方法觸發事件。

下面是乙個簡單的例子:

using system;

public

class

eventtest

}// 步驟4,用event關鍵字定義事件物件

private

event

myeventhandler myevent;

private

myeventcls myecls;

public

eventtest()

// 步驟6,以呼叫delegate的方式寫事件觸發函式

protected

void

onmyevent

(system.eventargs e)

public

void

raiseevent()

public

static

void

main()

else}}

輸出結果如下,紅色為使用者的輸入:

please input 『a』: a

myevent

is ok!

C 實現的委託機制(一)

c 實現的委託機制 一 1.引言 下面的委託實現使用的mygui裡面的委託實現,mygui是一款強大的gui庫,想理解更多的mygui資訊,猛擊這裡 我們的目標是要實現乙個跟.net幾乎完全一樣的委託,使用簡單,支援多播,可以新增刪除委託。同時支援c 的普通函式 模板函式 類成員函式,類的靜態成員函...

C 鍊錶的操作(一),如何建立乙個鍊錶

鍊錶是一種常見的重要的資料結構,它是動態的進行記憶體儲存分配的一種結構。用陣列存放資料時,必須事先定義固定的長度 即元素個數 但是事先難以確定有多少個元素時,則必須把陣列定義的足夠大,以保證成功。無疑,這會造成記憶體浪費,然而,鍊錶則沒有這種缺點,它可以根據需要,動態開闢記憶體單元。鍊錶中的各個元素...

c 用委託和事件實現不同窗體間的通訊 一

c 中的 事件 是當物件滿足一定條件,發生某些事情時,類向該類的客戶提供通知的一種方法。使用事件,擁有該事件的物件不必知道需要通知誰,一旦滿足了某個條件,將自動呼叫該事件,正確通知每個需要通知的物件。通過使用事件,提高了程式的模組化程度。例子 通過form1開啟form2,改變form2上combo...