1.委托的概述
簡(jiǎn)單說(shuō),委托就是把方法當(dāng)作參數(shù)傳遞。
委托(delegate)是一種動(dòng)態(tài)調(diào)用方法的類(lèi)型,它與類(lèi)、接口和數(shù)組一樣,都屬于引用型。在C#中,可以申聲明委托類(lèi)型、創(chuàng)建委托實(shí)例、把方法封裝在委托對(duì)象中。一個(gè)完整的飯否發(fā)具有方法名、返回值和參數(shù)列表,用來(lái)引用方法的委托也要求必須具有相同的返回值和參數(shù)列表。
委托對(duì)象的本質(zhì)代表了方法的引用(即內(nèi)存地址),具有以下特點(diǎn):
2.委托的聲明、實(shí)例化與使用
2.1委托的聲明
委托是一種引用型的數(shù)據(jù)類(lèi)型,在C#中使用關(guān)鍵字delegate聲明,一般形式如下:
[訪問(wèn)修飾符] delegate 返回值類(lèi)型 委托名([參數(shù)列表])
2.2 委托的實(shí)例化
委托是一種特殊的數(shù)據(jù)類(lèi)型,因此必須實(shí)例化之后才能用來(lái)調(diào)用方法。一般形式如下:
委托類(lèi)型委托變量名=new 委托型構(gòu)造函數(shù)(委托要引用的方法)
2.3 使用委托
實(shí)例化之后,就可以通過(guò)委托對(duì)象調(diào)用它所引用的方法。使用委托對(duì)象調(diào)用所有所有的方法時(shí),必須保證參數(shù)的類(lèi)型、個(gè)數(shù)、順序和方法聲明匹配。
2.4使用匿名方法
允許將代碼塊作為參數(shù)傳遞,以避免單獨(dú)定義方法,使用匿名方法創(chuàng)建委托對(duì)象的一般形式如下:
委托類(lèi)型 委托變量名=delegate([參數(shù)列表]){//代碼塊}
3.多路廣播與委托組合
實(shí)際上,C#允許使用一個(gè)委托對(duì)象調(diào)用多個(gè)方法,當(dāng)向委托添加更多的指向其他方法的引用時(shí),這些引用將被存儲(chǔ)在委托的調(diào)用列表里,這種委托叫多路廣播委托。C#的所有委托都是隱式的多路廣播委托。向一個(gè)委托的調(diào)用列表添加多個(gè)方法引用,可以通過(guò)該委托一次性調(diào)用所有的方法,這個(gè)過(guò)程稱(chēng)為多路廣播。
實(shí)現(xiàn)多路廣播的方法有兩種:
例如:
假設(shè)有一委托Calculate
Calculate a=new Calculate(Add);
Calculate b= new Calculate(Mulipty);
a=a+b;
由于一個(gè)委托對(duì)象只能返回一個(gè)值,且只返回調(diào)用列表中最后一個(gè)方法的返回值,因此為了避免混淆,建議在使用多路廣播時(shí),每個(gè)方法均用void定義。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注