除了为每个参数和返回类型定义一个新委托类型之外,还可以使用 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 个参数的方法。
声明一个委托参数是 double 类型,返回类型是 double:
delegate double DoubleOp(double x);
除了声明自定义委托 DoubleOp 之外,还可以使用 Func<in T,out TResult>委托。可以声明一个该委托类型的变量,或者声明该委托类型的数组,如下所示:
Func<double,double>[] operations=
{
MathOperations.MultiplyByTwo,
MathOperations.Square
};
使用该委托,并将 ProcessAndDisplayNumber()方法作为参数:
static void ProcessAndDisplayNumber(Func<double, double>action,
double value)
{
double result = action(value);
Console.WriteLine($"Value is {value}, result of operation is {result}");
}
往期推荐
C# 迭代器
C# 执行 SQL 语句
C# 连接数据库
C# 接口的实现与继承
C# 泛型的使用
Love life,love yourself
关注小编不迷路呦~