Action<T>和Func<T>委托事例
Action<T>和Func<T>委托事例
using System; //除了为每个参数和返回类型定义一个新委托类型之外,还可以使用Action<T>和Func<T>委托。 //泛型Action<T>委托表示引用一个void返回类型的方法。这个委托类存在不同的变体,可以传递至多16种不同的参数类型。 //没有泛型参数的Action类可以调用没有参数的方法。 //Action<in T>调用带一个参数的方法,Action<in T1,in T2>调用带两个参数的方法,Action<in T1,in T2,in T3,in T4,in T5,in T6,in T7,in T8> //调用带8个参数的方法。 //Func<T>委托可以以类似的方式使用。Func<T>允许调用带返回类型的方法。与Action<T>类似,Func<T>也定义了不同的变体, //至多也可以传递16个参数类型和一个返回类型。Func<out TResult>委托类型可以调用带返回类型且无参数的方法,Func<in T,out TResult> //调用带一个参数的方法,Func<in T1,in T2,in T3,in T4,out TResult>调用4个参数的方法。 namespace Action和Func泛型委托的事例 { class Program { static void Main(string[] args) { //泛型委托数组 Func<double ,double>[] operations = { MathOperations.MultiplyByTwo, MathOperations.Squre }; for(int i = 0;i<operations.Length;i++){ System.Console.WriteLine($"Using operations[{i}]"); ProcessAndDisplayNumber(operations[i],2.0); ProcessAndDisplayNumber(operations[i],7.94); ProcessAndDisplayNumber(operations[i],1.414); System.Console.WriteLine(); } //Console.WriteLine("Hello World!"); } //使用该委托,并将ProcessAndDisplayNumber()方法作为参数: static void ProcessAndDisplayNumber(Func<double,double> action,double value){ double result = action(value); System.Console.WriteLine($"Value is {value},result of operation is {result}"); } } //声明下需要调用的方法 class MathOperations{ public static double MultiplyByTwo(double value)=>value*2; public static double Squre(double value)=>value*value; } }