输出如下:
  Morning, Jimmy Zhang
  早上好, 张子阳
  我们现在对委托做一个总结:
  委托是一个类
,它定义了方法的类型
,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性
。  将方法绑定到委托
  看到这里,是不是有那么点如梦初醒的感觉?于是,你是不是在想:在上面的例子中,我不一定要直接在GreetPeople()方法中给 name参数赋值,我可以像这样使用变量:
以下是引用片段:
  static void Main(string[] args) { 
  string name1, name2; 
  name1 = "Jimmy Zhang"; 
  name2 = "张子阳"; 
  GreetPeople(name1, EnglishGreeting); 
  GreetPeople(name2, ChineseGreeting); 
  Console.ReadKey(); 
  }
  而既然委托GreetingDelegate 和 类型 string 的地位一样,都是定义了一种参数类型,那么,我是不是也可以这么使用委托?
以下是引用片段:
  static void Main(string[] args) { 
  GreetingDelegate delegate1, delegate2; 
  delegate1 = EnglishGreeting; 
  delegate2 = ChineseGreeting; 
  GreetPeople("Jimmy Zhang", delegate1); 
  GreetPeople("张子阳", delegate2); 
  Console.ReadKey(); 
  }
  如你所料,这样是没有问题的,程序一如预料的那样输出
。这里,我想说的是委托不同于string的一个特性:可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用其所绑定的方法。在这个例子中,语法如下:
以下是引用片段:
  static void Main(string[] args) { 
  GreetingDelegate delegate1; 
  delegate1 = EnglishGreeting; // 先给委托类型的变量赋值 
  delegate1 += ChineseGreeting; // 给此委托变量再绑定一个方法 
  // 将先后调用 EnglishGreeting 与 ChineseGreeting 方法 
  GreetPeople("Jimmy Zhang", delegate1); 
  Console.ReadKey(); 
  }
  输出为:
  Morning, Jimmy Zhang
  早上好, Jimmy Zhang
  实际上,我们可以也可以绕过GreetPeople方法,通过代理来直接调用EnglishGreeting和ChineseGreeting:
以下是引用片段:
  static void Main(string[] args) { 
  GreetingDelegate delegate1; 
  delegate1 = EnglishGreeting; // 先给委托类型的变量赋值 
  delegate1 += ChineseGreeting; // 给此委托变量再绑定一个方法 
  // 将先后调用 EnglishGreeting 与 ChineseGreeting 方法 
  delegate1 ("Jimmy Zhang"); 
  Console.ReadKey(); 
  }
  NOTE:这在本例中是没有问题的,但回头看下上面GreetPeo