C#高级编程(第8版)——委托声明、使用(第二节)
简单的委托示例
在这个示例中,定义一个类MathsOperations,它有两个静态方法,对double类型的值执行两个操作,然后使用该委托,调用这些方法。这个数学类如下所示:
class MathOperations
{
public static double MultiplyByTwo(double value)
{
return value * 2;
}
public static double Square(double value)
{
return value * value;
}
}
下面调用这些方法:
using System;
namespace Wrox.ProCSharp.Delegates
{
delegate double DoubleOp(double x);
class Program
{
static void Main()
{
DoubleOp[] operations =
{
MathOperations.MultiplyByTwo,
MathOperations.Square
};
for (int i = 0; i < operations.Length; i++)
{
Console.WriteLine("Using operations[{0}]:", i);
ProcessAndDisplayNumber(operations[i], 2.0);
ProcessAndDisplayNumber(operations[i], 7.94);
ProcessAndDisplayNumber(operations[i], 1.414);
Console.WriteLine();
}
}
static void ProcessAndDisplayNumber(DoubleOp action, double value)
{
double result = action(value);
Console.WriteLine(
"Value is {0}, result of operation is {1}", value, result);
}
}
}
在上面的代码中,实例化了一个委托数组DoubleOp(记住,一旦定义了委托类,基本上就可以实例化它的实例,就像处理一般的类那样____所以把一些委托的实例放在数组中是可以的)。该数组的每个元素都初始化为由MathsOprations类实现的不同操作。然后遍历这个数组,把每个操作应用到3个不同的值上。这说明了使用委托的一种方式___把方法组合到一个数组中来使用,这样就可以在循环中调用不同的方法了。
这段代码的关键一行是把每个委托传递给ProcessAndDisplayNumber()方法,例如:
ProcessAndDisplayNumber(oprations[i],2.0);
其中传递了委托名,但不带任何参数。假定oprations[i]是一个委托,其语法是:
、oprations[i]表示“这个委托”。换言之,就是委托表示的方法。
、oprations[i](2.0)表示“实际上调用这个方法,参数放在圆括号中“。
ProcessAndDisplayNumber()方法定义为把一个委托作为第一个参数:
static void ProcessAndDisplayNumber(DoubleOp action,double value);
然后,在这个方法中,调用:
double result=action(value);
但实际上市调用action委托实例封装的方法,其返回结果存储在result中。运行这个示例,得到如下所示的结果:
SimpleDelegate Using oprations[0]: Value is 2, resutl of opration is 4 Value is 7.94, result of opration is 15.88 Value is 1.414, result of opration is 2.828 Using oprations[1]: Value is 2,result of opration is 4 Value is 7.94, result of opration is 63.0436 Value is 1.414, result of opration is 1.999396

浙公网安备 33010602011771号