C#委托介绍
托和事件在.NET Framework[1] 中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易
C#演示委托的简单用法
例子,一个演示委托的代码,最后给出结果。
代码如下 | 复制代码 |
using System; namespace Example.Dele { class Operations { public static double MulTwo(double value) { return value * 2; } public static double Square(double value) { return value * value; } } delegate double DoubleOp(double x); class Dele { static void Main() { DoubleOp[] op = { new DoubleOp(Operations.MulTwo), new DoubleOp(Operations.Square) }; for( int i = 0; i < op.Length; i++ ) { Console.WriteLine("使用第{0}个操作", i); Display(op[i], 1.5); Display(op[i], 3.14); Display(op[i], 10); Console.WriteLine(); } } static void Display(DoubleOp action, double value) { double result = action(value); Console.WriteLine("{0}的运算结果是{1}", value, result); } } } |
C#委托的好处
某人有三子,让他们各自带一样东西出门,并带回一头猎物。
可以理解为一种父亲对儿子的委托:
猎物 办法(工具 某工具)
三个人执行委托的方法各不相同
兔子 打猎(工具 弓)
野鸡 买(工具 钱)
狼 诱捕(工具 陷阱)
委托是一个类型,用来指称所有形式相同的方法(返回值类型相同而且参数也相同)。
public delegate double Handler(double[] ds);
public double Sum(double[] ds) {//在方法中执行操作。}
public double Average(double[] ds) {//在方法中执行操作。}
委托的实例化
用new关键字(将方法名作为参数)生成一个委托对象,建立委托与方法的关联。
例:Handler handler = new Handler(Sum);使用委托可以像使用变量一样使用委托的实例。使用委托时,需要给委托按要求传递参数。
使用委托,则委托所关联的方法被调用。
例:double[] weights={1.0,2.0,3.0,4.0};
double result=handler(weights);
一个委托可以通过+运算委托关联多个方法,叫多路广播委托(对应于单路广播委托)。
如果此时使用委托,则所有的关联方法都被调用。
例:Handler handler = new Handler(Sum);
handler += new Handler(Average);
这个委托(第三方)就会去调用方法去帮你实现
委托的好处:
1.相当于用方法作为另一方法参数(类似于C的函数指针)
2.在两个不能直接调用的方法中作为桥梁,如:在多线程中的跨线程的方法调用就得用委托