6 委託與事件

2022-04-03 07:11:04 字數 1588 閱讀 4211

總的說來在.net 平台上委託有三大作用:實現委託功能,實現**函式功能,實現事件功能。

1 委託

當需要把方法傳遞給其它方法時,就需要使用委託。

1.1 宣告委託

委託需要承載哪些資訊呢?首先,它儲存了方法名,還有引數列表(方法簽名),以及返回的型別。比如:

delegate string/*返回類 型*/ processdelegate(int i);

這就是乙個委託的定義。藍色部分是宣告委託的關鍵字,紅色部分是返回的型別,而黑色部分是委託的型別名,和乙個類名差不多,而()裡的就是引數部分。它的 意思是,你要使用這個委託來做事情的話,那麼,做事情的方法必須滿足以下條件:

1、返回型別和委託的返回型別一致,這裡是string型別;

2、能且只能有乙個引數,並且是int型別。

ok,滿足以上兩個條件,一切就可以工作了:)

例如:**1

using

system;

2using

system.collections.generic;

3using

system.text;45

namespace623

}2425public

class

test

2637}38

}輸出的結果是:

text1tex2

定義乙個委託就是告訴編譯器這種型別的委託代表了那種型別的方法,然後建立該

委託的乙個或多個例項,編譯器在後台建立表示該委託的乙個類。

在c#中,委託在語法上總是帶有乙個引數的的建構函式,這個引數就是委託引用的方法。這個方法必須匹配最初定義委託時的簽名 。

c#2.0使用委託推斷擴充套件了委託的語法,為了減少輸入量,只需要委託例項,就可以只傳送方法的名稱。

例如 mydelete mydeletedemo=new mydelete(x.tostring)

可以寫成mydelete mydeletedemo=x.tostring;  //只要把變數的方法名傳遞給委託例項就可以了

2 多播委託

委託可以包含多個方法,這種包含多個方法的委託稱為多播委託。如果呼叫多播委託,就可以連續呼叫多個方法。為此,委託的簽名就必須返回void型別,否則就只能得到委託呼叫的最後乙個方法返回的結果。

通過乙個委託呼叫多個方法存在乙個問題。多播委託包含乙個逐個呼叫的委託集合,如果通過委託呼叫 的乙個方法丟擲了異常,整個迭代就會停止。

3 匿名方法

使用委託還有另外一種方式,即通過匿名方法。匿名方法是用作 委託引數 的乙個 **塊。

用匿名方法定義委託與前面的方法並沒有區別。

但在例項化委託時就有區別 了。下面的例子說明如何使用匿名委託

**using

system;

namespace

demo.delete

;console.writeline(anotherdel(

"my life is

"));}}

}匿名方法的好處是減少了要編寫的**,不必定義由委託使用的方法。如果需要使用匿名方法多次編寫同乙個方法,就不要使用匿名方法。而應該編寫乙個指定的方法比較好

,這樣只編寫一次

,以後就可以通過名稱來引用它了。

委託與事件

1.建立乙個類,分別建立加 減 乘 除四個方法,通過委託和事件,實現 輸入兩個計算數,完成所有的四個方法的呼叫,計算出結果顯示。建立乙個警察 policeman 類,乙個小偷 thief 類,例項化兩個類的物件,當policeman類中警笛鳴響 alarm 方法執行時,觸發小偷逃跑 runaway ...

委託與事件

委託就是以方法做引數進行傳遞,它定義的是方法的框架,如果用這個委託,所宣告的方法就必須按照給定的引數及返滬型別進行處理。宣告委託的方式 delegate 返回值型別 委託型別名 引數 比如delegate void stringprocess string s 注意這裡的除了前面的delegate,...

委託與事件

委託與事件 一 委託 delegate 1 委託是一種可以把引用儲存為函式的型別。2 在定義了委託後,就可以宣告該委託型別的變數,接著把這個變數初始化為與委託有相同返回型別和引數類別的函式引用,之後,就可以使用委託變數呼叫這個函式,就像該變數是乙個函式一樣。如 double multiply dou...