C 中的委託到底是什麼概念??

2022-07-16 09:57:11 字數 2200 閱讀 9233

委託,簡單理解是這樣的.

比如您要管您的孩子,把孩子送進了幼兒園.

ok.此時您就把您的孩子委託給了幼兒園.

當幼兒園放學,將孩子交還給您的手中.則是委託的**.

當然我這裡的例子是說非同步委託呼叫.您也可以同步.

什麼是同步委託呼叫?

您去銀行存錢.把錢給櫃員.他們幫你點鈔.存款然後給您存摺或卡.

那麼您就相當於把錢委託給了櫃員讓他去執行存錢的這個函式.

明白了麼?

delegate

delegate是c#中的一種型別,它實際上是乙個能夠持有對某個方法的引用的類。與其它的類不同,delegate類能夠擁有乙個簽名(signature),並且它"只能持有與它的簽名相匹配的方法的引用"。它所實現的功能與c/c++中的函式指標十分相似。它允許你傳遞乙個類a的方法m給另乙個類b的物件,使得類b的物件能夠呼叫這個方法m。但與函式指標相比,delegate有許多函式委託和事件在 .net framework中的應用非常廣泛指標不具備的優點。首先,函式指標只能指向靜態函式,而delegate既可以引用靜態函式,又可以引用非靜態成員函式。在引用非靜態成員函式時,delegate不但儲存了對此函式入口指標的引用,而且還儲存了呼叫此函式的類例項的引用。其次,與函式指標相比,delegate是物件導向、型別安全、可靠的受控(managed)物件。也就是說,runtime能夠保證delegate指向乙個有效的方法,你無須擔心delegate會指向無效位址或者越界位址。

實現乙個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

my event is ok!

委託到底是什麼?

說到委託,大多數的程式設計人員可能都聽說過,甚至用過,可是能把委託說明白,別人也能聽明白的就不多了吧。這篇文章就由淺入深的介紹一下,委託到底是什麼。委託是物件導向的標誌,物件導向 於現實世界,當然委託在現實世界中也是有原型的,比如 小明,幫我買包菸 這就是現實中的委託 我 委託小明 買飯 物件導向是...

c 委託到底是什麼,為麼需要委託

首先,我們來說說物件導向,所謂物件導向是對不同職階的地位物件的封裝,通俗的說就是專業的事情交給專業的人做 又比如在 fate 中具有七個職階,不同的職階都有其自己的專屬技能和所擅長的領域。然而,物件想學習新的技能就得繼承,繼承的弊端在於會使乙個類過於龐大而且有些方法,並不是我們現在的這個子類所需要的...

敏捷到底是什麼?

文 ivar jacobson 在支援軟體工程 比如rational統一過程rup 與敏捷陣營 比如scrum或是xp 之間,人們一直存在著衝突。也不難理解,因為這兩種方法間都是在用著彼此並不相容的方式來描述的。其實大可不必,因為他們背後的觀點全然是相輔相成的。關鍵在於該如何用對兩者來說都公平的方式...