如何把方法(函数)当参数传递

  方法的参数一般是变量,但在某些情况下需要这个参数是另一个方法,这时就可以参考下面这段代码了。这个例子也很好的说明了委托在实际工作中的应用,代码片段来源于《C#高级编程第6版》随书的示例代码。

示例代码
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  
第19行定义了一个代理类型,第25行实例化了代理类型,第29、30行的注释表示完整的实例化的方式(可以替换掉27、28两行)。

36   ProcessAndDisplayNumber(operations[i],
2.0);
这行就是重点了,调用
ProcessAndDisplayNumber方法,其中的第一个参数operations[i]就是委托类型,用来实现将方法作为一个参数来传递。

46  double result = action(value);
这里的action只是调用了委托实例封装的方法而已。






原文地址:https://www.cnblogs.com/Excellent/p/1672712.html