委托练习一
/* 委托 */ using System; namespace Frank { public class Test { private delegate string GetAString();//定义委托 private delegate double DoubleOp(double x);//定义第二个委托 public static void Main(string[] args) { GetAString str = new GetAString(1.ToString); GetAString str2 = 1.ToString;//自动类型推断 Console.WriteLine(str());//执行int类型里面的ToString方法输出1 //完整写法 str = new GetAString(new Test().Print); System.Console.WriteLine(str.Invoke());//执行委托上面的方法 //简写模式 str = new Test().Print; System.Console.WriteLine(str()); //利用委托数组执行多个操作 DoubleOp[] operations = new DoubleOp[] { new DoubleOp(Test2.MultiplyByTwo),//第一个操作全写模式 Test2.Square//第二个操作,简写模式 }; for(int i = 0;i < operations.Length; i++) { System.Console.WriteLine("i = " +i); ProcessAndDisplayNumber(operations[i],2.0+i); } //使用Func委托 Func<double,double>[] operations2 = new Func<double,double>[] { new Func<double,double>(Test2.MultiplyByTwo), Test2.Square }; for(int i = 0;i < operations2.Length; i++) { System.Console.WriteLine("i = " +i); ProcessAndDisplayNumber(operations2[i],2.0+i); } } public string Print() { System.Console.WriteLine("委托执行方法!"); return "sadas---"; } static void ProcessAndDisplayNumber(DoubleOp action,double value)//带委托参数的普通方法 { double result = action.Invoke(value);//或者action() System.Console.WriteLine("value {0} 计算后的值 {1}",value,result); } static void ProcessAndDisplayNumber(Func<double,double> action,double value)//重载一个带泛型委托参数的普通方法 { double result = action(value);//执行委托 Console.WriteLine(result); } } public class Test2//自定义类 { public static double MultiplyByTwo(double value) { return value * 2; } public static double Square(double value) { return value * value; } } }