方法的参数一般是变量,但在某些情况下需要这个参数是另一个方法,这时就可以参考下面这段代码了。这个例子也很好的说明了委托在实际工作中的应用,代码片段来源于《C#高级编程第6版》随书的示例代码。
示例代码第19行定义了一个代理类型,第25行实例化了代理类型,第29、30行的注释表示完整的实例化的方式(可以替换掉27、28两行)。1 using System;
2
3 namespace Wrox.ProCSharp.Delegates
4 {
5 class MathOperations
6 {
7 public static double MultiplyByTwo(double value)
8 {
9 return value * 2;
10 }
11
12 public static double Square(double value)
13 {
14 return value * value;
15 }
16 }
17
18
19 delegate double DoubleOp(double x);
20
21 class MainEntryPoint
22 {
23 static void Main()
24 {
25 DoubleOp[] operations =
26 {
27 MathOperations.MultiplyByTwo,
28 MathOperations.Square
29 //new DoubleOp(MathOperations.MultiplyByTwo),
30 //new DoubleOp(MathOperations.Square)
31 };
32
33 for (int i = 0; i < operations.Length; i++)
34 {
35 Console.WriteLine("Using operations[{0}]:", i);
36 ProcessAndDisplayNumber(operations[i], 2.0);
37 ProcessAndDisplayNumber(operations[i], 7.94);
38 ProcessAndDisplayNumber(operations[i], 1.414);
39 Console.WriteLine();
40 }
41 Console.ReadLine();
42 }
43
44 static void ProcessAndDisplayNumber(DoubleOp action, double value)
45 {
46 double result = action(value);
47 Console.WriteLine(
48 "Value is {0}, result of operation is {1}", value, result);
49 }
50 }
51 }
52
36 ProcessAndDisplayNumber(operations[i], 2.0);
这行就是重点了,调用ProcessAndDisplayNumber方法,其中的第一个参数operations[i]就是委托类型,用来实现将方法作为一个参数来传递。
46 double result = action(value);
这里的action只是调用了委托实例封装的方法而已。