1. 定义: 让一个委托指向多个方法
- 给委托增加一个方法 a+= function
- 给委托去掉一个方法 a-= function
- 多播委托的调用顺序,是按照添加方法的顺序来调用,先添加先调用。
- 如果委托的方法有返回值,那么只能得到调用的最后一个方法的结果。
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的引用
// 如果一个委托没有指向任何方法,而去调用它,那么程序会crash。因此 最好在调用委托的方法的时候做一下判断
if(a!=NULL){
a();
}
}
获取多播委托中所有委托的方法
Action a1 = Method1;
a1 += Method2;
Delegate[] delegates = a1.GetInvocationList();
foreach(delegate d in delegates){ // 遍历所有委托,然后单独调用
d.DynamicInvoke(NULL);
}
- 作业布置
1、要求使用委托 实现一个方法,给该方法传递两个浮点型参数,和一个运算方法,最终返回这两个数的运算结果 。
2、使用系统的List 中的sort方法 ,通过传递一个委托方法,对自定义的类(比如学生类)来按照自定义的方式(比如按照成绩、年龄、身高、体重之类的)来排序。
3、作业3
尝试给之前自定义的MyList类中, 添加一个sort方法,传递一个委托方法,可以自定义排序。 (也就是说实现作业2中系统的List中的那个sort方法)
4、作业4
回顾复习之前的知识点,包括上课的案例、代码。 之前的作业没做完的同学,尝试去完成。
作者:silence_k
链接:http://www.jianshu.com/p/3ab47e2bfdcb
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。