1.将方法作为方法的参数
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace DelegateV2
6 {
7 public delegate void Greetingdelegate(string name);
8
9 public class Test
10 {
11 public static void EngGreeting(string name)
12 {
13 Console.WriteLine("英文版"+name);
14 }
15
16 public static void ChineseGreeting(string name)
17 {
18 Console.WriteLine("中文版"+name);
19 }
20 }
21
22 public class TestV2
23 {
24 public static void HanYuGreeting(string name)
25 {
26 Console.WriteLine("韩语版" + name);
27 }
28 }
29
30 class Program
31 {
32 //将方法作为方法的参数
33 private static void GreetPeople(string name, Greetingdelegate greeting)
34 {
35 greeting(name);
36
37 }
38
39 static void Main(string[] args)
40 {
41 //测试1
42 GreetPeople("韩语版测试", TestV2.HanYuGreeting);
43 GreetPeople("中文版测试", Test.ChineseGreeting);
44 GreetPeople("英文版测试", Test.EngGreeting);
45
46
47 //测试2
48 string name = "-----测试";
49 GreetPeople(name, TestV2.HanYuGreeting);
50
51 //测试3
52 Greetingdelegate delegate1 = TestV2.HanYuGreeting;//赋值
53 Greetingdelegate delegate2 = Test.EngGreeting;
54 GreetPeople(name, delegate1);
55 GreetPeople(name, delegate2);
56
57 //测试4
58 Greetingdelegate delegate3 = TestV2.HanYuGreeting;//赋值的语法
59 delegate3 += Test.EngGreeting;//绑定的语法 ---------将方法绑定到委托
60
61 GreetPeople("V4测试", delegate3);
62
63 //测试5 -----取消绑定
64 delegate3 -= Test.EngGreeting;//取消绑定
65 GreetPeople("V5测试", delegate3);
66 }
67 }
68 }
69
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace DelegateV2
6 {
7 public delegate void Greetingdelegate(string name);
8
9 public class Test
10 {
11 public static void EngGreeting(string name)
12 {
13 Console.WriteLine("英文版"+name);
14 }
15
16 public static void ChineseGreeting(string name)
17 {
18 Console.WriteLine("中文版"+name);
19 }
20 }
21
22 public class TestV2
23 {
24 public static void HanYuGreeting(string name)
25 {
26 Console.WriteLine("韩语版" + name);
27 }
28 }
29
30 class Program
31 {
32 //将方法作为方法的参数
33 private static void GreetPeople(string name, Greetingdelegate greeting)
34 {
35 greeting(name);
36
37 }
38
39 static void Main(string[] args)
40 {
41 //测试1
42 GreetPeople("韩语版测试", TestV2.HanYuGreeting);
43 GreetPeople("中文版测试", Test.ChineseGreeting);
44 GreetPeople("英文版测试", Test.EngGreeting);
45
46
47 //测试2
48 string name = "-----测试";
49 GreetPeople(name, TestV2.HanYuGreeting);
50
51 //测试3
52 Greetingdelegate delegate1 = TestV2.HanYuGreeting;//赋值
53 Greetingdelegate delegate2 = Test.EngGreeting;
54 GreetPeople(name, delegate1);
55 GreetPeople(name, delegate2);
56
57 //测试4
58 Greetingdelegate delegate3 = TestV2.HanYuGreeting;//赋值的语法
59 delegate3 += Test.EngGreeting;//绑定的语法 ---------将方法绑定到委托
60
61 GreetPeople("V4测试", delegate3);
62
63 //测试5 -----取消绑定
64 delegate3 -= Test.EngGreeting;//取消绑定
65 GreetPeople("V5测试", delegate3);
66 }
67 }
68 }
69
2.
可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用其所绑定的方法。
注意这里,第一次用的“=”,是赋值的语法;第二次,用的是“+=”,是绑定的语法。如果第一次就使用“+=”,将出现“使用了未赋值的局部变量”的编译错误。
使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。
参考链接:http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html