標籤:使用 strong 資料 sp 代碼 on c ad new
1.委託的概述
簡單說,委託就是把方法當作參數傳遞。
委託(delegate)是一種動態調用方法的類型,它與類、介面和數組一樣,都屬於引用型。在C#中,可以申聲明委託類型、建立委託執行個體、把方法封裝在委派物件中。一個完整的飯否發具有方法名、傳回值和參數列表,用來引用方法的委託也要求必須具有相同的傳回值和參數列表。
委派物件的本質代表了方法的引用(即記憶體位址),具有以下特點:
- 與C++中的指標相似,但不同的是委託是完全物件導向的,是安全的資料類型。
- 委託允許將方法作為參數傳遞。
- 委託可用回呼函數。
- 委託可以把多個方法連在一起。可在觸發事件時,啟動多個事件處理常式。
2.委託的聲明、執行個體化與使用
2.1委託的聲明
委託是一種引用型的資料類型,在C#中使用關鍵字delegate聲明,一般形式如下:
[存取修飾詞] delegate 傳回值類型 委託名([參數列表])
2.2 委託的執行個體化
委託是一種特殊的資料類型,因此必須執行個體化之後才能用來調用方法。一般形式如下:
委託類型 委託變數名=new 委託型建構函式(委託要引用的方法)
2.3 使用委託
執行個體化之後,就可以通過委派物件調用它所引用的方法。使用委派物件調用所有所有的方法時,必須保證參數的類型、個數、順序和方法聲明匹配。
2.4使用匿名方法
允許將代碼塊作為參數傳遞,以避免單獨定義方法,使用匿名方法建立委派物件的一般形式如下:
委託類型 委託變數名=delegate([參數列表]){//代碼塊}
3.多路廣播與委託組合
實際上,C#允許使用一個委派物件調用多個方法,當向委託添加更多的指向其他方法的引用時,這些引用將被儲存在委託的調用列表裡,這種委託叫多路廣播委託。C#的所有委託都是隱式的多路廣播委託。向一個委託的調用列表添加多個方法引用,可以通過該委託一次性調用所有的方法,這個過程稱為多路廣播。
實現多路廣播的方法有兩種:
- 通過“+”運算子直接將兩個同類型的委派物件組合起來。
例如:
假設有一委託Calculate
Calculate a=new Calculate(Add);
Calculate b= new Calculate(Mulipty);
a=a+b;
由於一個委派物件只能返回一個值,且只返回調用列表中最後一個方法的傳回值,因此為了避免混淆,建議在使用多路廣播時,每個方法均用void定義。
- 通過“+=”運算子將新建立的委派物件添加到委託調用列表zhong。還可以使用“-=”運算子來移除調用列表中的委派物件。
初學筆記(C#委託)