1. 定義: 讓一個委托指向多個方法
- 給委托增加一個方法 a+= function
- 給委托去掉一個方法 a-= function
- 多播委托的調(diào)用順序,是按照添加方法的順序來調(diào)用,先添加先調(diào)用枪眉。
- 如果委托的方法有返回值土砂,那么只能得到調(diào)用的最后一個方法的結(jié)果积担。
static void Test1(){
Console.WriteLine("Test1");
}
static void Test2(){
Console.WriteLine("Test2");
}
static void Mian(string[] args){
Action a = Test1;
a += Test2; //表示增加一個委托引用
a();
// 輸出 Test1 Test2
a -= Test1; //去掉a對Test1的引用
a -= Test2; //去掉a對Test2的引用
// 如果一個委托沒有指向任何方法懈万,而去調(diào)用它呀忧,那么程序會crash辞友。因此 最好在調(diào)用委托的方法的時候做一下判斷
if(a!=NULL){
a();
}
}
獲取多播委托中所有委托的方法
Action a1 = Method1;
a1 += Method2;
Delegate[] delegates = a1.GetInvocationList();
foreach(delegate d in delegates){ // 遍歷所有委托栅哀,然后單獨(dú)調(diào)用
d.DynamicInvoke(NULL);
}
- 作業(yè)布置
1震肮、要求使用委托 實(shí)現(xiàn)一個方法,給該方法傳遞兩個浮點(diǎn)型參數(shù)留拾,和一個運(yùn)算方法戳晌,最終返回這兩個數(shù)的運(yùn)算結(jié)果 。
2痴柔、使用系統(tǒng)的List 中的sort方法 沦偎,通過傳遞一個委托方法,對自定義的類(比如學(xué)生類)來按照自定義的方式(比如按照成績咳蔚、年齡豪嚎、身高、體重之類的)來排序谈火。
3侈询、作業(yè)3
嘗試給之前自定義的MyList類中, 添加一個sort方法糯耍,傳遞一個委托方法扔字,可以自定義排序。 (也就是說實(shí)現(xiàn)作業(yè)2中系統(tǒng)的List中的那個sort方法)
4温技、作業(yè)4
回顧復(fù)習(xí)之前的知識點(diǎn)革为,包括上課的案例、代碼舵鳞。 之前的作業(yè)沒做完的同學(xué)篷角,嘗試去完成。
作者:silence_k
鏈接:http://www.reibang.com/p/3ab47e2bfdcb
來源:簡書
著作權(quán)歸作者所有系任。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)恳蹲,非商業(yè)轉(zhuǎn)載請注明出處。