黑马程序员技术交流社区

标题: 怎么合并委托(多路广播委托) [打印本页]

作者: wang29901    时间: 2013-11-23 17:16
标题: 怎么合并委托(多路广播委托)
本帖最后由 wang29901 于 2013-11-24 15:12 编辑

怎么合并委托(多路广播委托)

作者: u010209195    时间: 2013-11-23 17:33
  1. //声明委托
  2. delegate void Del(string s);

  3. //测试类
  4. class TestClass
  5. {
  6.         //静态方法
  7.     static void Hello(string s)
  8.     {
  9.         System.Console.WriteLine("  Hello, {0}!", s);
  10.     }
  11.         //静态方法
  12.     static void Goodbye(string s)
  13.     {
  14.         System.Console.WriteLine("  Goodbye, {0}!", s);
  15.     }
  16.     //主函数
  17.     static void Main()
  18.     {
  19.                
  20.         Del a, b, c, d;

  21.                 //创建一个委托,并且指向Hello方法(这里都是在同一个类中,所以静态方法不用class为前缀)
  22.         a = Hello;
  23.                
  24.                 //创建一个委托,并且指向Goodbye方法(这里都是在同一个类中,所以静态方法不用class为前缀)
  25.         b = Goodbye;

  26.         //创建一个委托,包含a和b委托的方法
  27.         c = a + b;

  28.                 //从c委托中移除a委托,只剩下b委托,指向d委托
  29.         d = c - a;
  30.                
  31.                 //显示出来
  32.         System.Console.WriteLine("Invoking delegate a:");
  33.         a("A");
  34.         System.Console.WriteLine("Invoking delegate b:");
  35.         b("B");
  36.         System.Console.WriteLine("Invoking delegate c:");
  37.         c("C");
  38.         System.Console.WriteLine("Invoking delegate d:");
  39.         d("D");
  40.     }
  41. }
复制代码
委托对象的一个用途在于;
     可以使用 "+"(英文加号)运算符将它们分配给一个要成为多路广播委托的委托实例。组合的委托可调用组成它的那两个委托,例如上面代码中的C委托;  注意:只有相同类型的委托才可以组合。
                  "-"(英文减号) 运算符可用来从组合的委托移除组件委托,例如上面的d委托。
作者: u010209195    时间: 2013-11-23 17:37
  1. Invoking delegate a:
  2.   Hello, A!
  3. Invoking delegate b:
  4.   Goodbye, B!
  5. Invoking delegate c:
  6.   Hello, C!
  7.   Goodbye, C!
  8. Invoking delegate d:
  9.   Goodbye, D!
复制代码
这个是运行的结果,由于是测试用的,所以方法都写的是很简单的的,委托的返回值和参数类型必须和委托指向的方法的返回值和参数类型相同,并且参数的个数要相等。{:soso_e130:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2