! ! 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");! !