面向对象(十七)-多播委托与作业

1. 定义: 让一个委托指向多个方法

    1. 给委托增加一个方法 a+= function
    1. 给委托去掉一个方法 a-= function
    1. 多播委托的调用顺序,是按照添加方法的顺序来调用,先添加先调用。
    1. 如果委托的方法有返回值,那么只能得到调用的最后一个方法的结果。
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
來源:
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(面向对象(十七)-多播委托与作业)