今天晚上感觉到精力充沛,所以看看了书,随便翻开看到了一个关于委托了小例子,在这里拿出来跟大家分享一下。
首先定义了一个MathOperations类,该类里面有两个静态方法(定义成静态的方便后面调用),方法真的简单的过分,我就不解释了,上代码吧:
class MathOperations { public static double MultiplyByTwo(double value) { return value * 2; } public static double Square(double value) { return value * value; } }
简单吧!
下面定义调用方法:
delegate double DoubleOp(double x); class Program { static void Main(string[] args) { 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(Environment.NewLine); } Console.ReadKey(); } static void ProcessAndDisplayNumber(DoubleOp action, double value) { double result = action(value); Console.WriteLine("Value is {0},result of operation is {1}", value, result); } }
既然要用委托来实现,那么一定要定义一个委托咯,代码如上。
在这段代码中,实例化了一个委托数组DoubleOp(温馨提示:一旦定义了委托,基本就可以实例化它了,那么就可以像处理类那样,使用该委托了,所以这里把一些委托的实例放到数组中是可以的)。数组被初始化为由MathsOperations类实现的不同操作。然后遍历该数组,把每个操作应用到3个不同的值上,这恰好说明了委托的一种方式:把方法组合到一个数组中来使用,这样就实现了在循环中调用不同的方法了。
这段代码的关键一行是把每一委托传递给了ProcessAndDisplayNumber()方法, 例如:
ProcessAndDisplayNumber(operations[i], 2.0);
这里“operations[i]”,如果i=0的话,可以使用operations[0](2.0),直接调用MultiplyByTwo(2.0)该方法。
ProcessAndDisplayNumber()方法定义了把一个委托作为一个参数,
然后调用时:
double result=action(value);
总结:委托的用法跟类是一样一样的,唯一的区别是委托是指向方法的引用,把方法当作参数进行传递,而实现的方法可以自定义。