初看委托,觉得它有些像接口。但细细体会却觉得还是有差别。差别就在于委托关心的一类方法,类似C++中的函数指针。而接口关心的具有相同数据或方法的类。
1
using System;
2
using System.Collections;
3
4
namespace Exam
5
{
6
// 这里定义一个委托,用以表示所有对整形数字A和B进行处理后返回整形数据的方法
7
public delegate int CountMethodDelegate(int a, int b);
8
9
class Class1
10
{
11
// 下面定义一些对A和B进行处理的方法
12
13
// 加法
14
static int Plus(int a, int b)
15
{
16
Console.WriteLine(a.ToString() + "+" + b.ToString() +" = ");
17
return a + b;
18
}
19
20
// 减法
21
static int Minus(int a, int b)
22
{
23
Console.WriteLine(a.ToString() + "-" + b.ToString() + " = ");
24
return a - b;
25
}
26
27
// 乘法
28
static int Multiply(int a, int b)
29
{
30
Console.WriteLine(a.ToString() + "*" + b.ToString() + " = ");
31
return a * b;
32
}
33
34
// 除法
35
static int Divide(int a, int b)
36
{
37
Console.WriteLine(a.ToString() + "/" + b.ToString() + " = ");
38
if (b != 0)
39
return a / b;
40
else
41
return 0;
42
}
43
44
[STAThread]
45
static void Main(string[] args)
46
{
47
int A, B;
48
A = 100;
49
B = 7;
50
51
// 连续向这个委托的实例添加方法。
52
CountMethodDelegate test = new CountMethodDelegate(Plus);
53
test += new CountMethodDelegate(Minus);
54
test += new CountMethodDelegate(Multiply);
55
test += new CountMethodDelegate(Divide);
56
57
58
// 调用委托test所代表的方法,同时传递他需要的参数A和B。
59
// 一次调用,执行所有方法。
60
Console.Write(test(A, B));
61
62
Console.ReadKey();
63
}
64
}
65
}
66

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

可以看到输出结果,并不是我所期望的每个公式后的有结果出现。只有最后一个除法有结果。那这说明什么问题呢。就是在多播委托时,只有一个结果被返回。但为什么不一定是最后一个方法调用呢。因为书上有说dotNet框架只保证会执行全部委托的方法,但不确保执行的顺序是按照加入的顺序。这里测试几次都是最后一个结果被返回。有可能是因为我测试的量不够大。所以看不到其他的情况出现。
洪虎
2006-10-10