是的,Action 的不同重载采用不同数量的输入参数并具有 void 返回类型。
Action public delegate void Action()
Action<T> public delegate void Action<T>(T obj)
Action<T1,T2> public delegate void Action<T1,T2>(T1 arg1, T2 arg2)
Action<T1,T2,T3> public delegate void Action<T1,T2,T3>(T1 arg1, T2 arg2, T3 arg3)
...
第一行就是你要找的。p>
较新的框架版本添加了带有更多参数的重载。
最大参数数:
- .NET Framework 2.0:1
- .NET Framework 3.5:4
- .NET Framework 4.0:16
- Silverlight: 16
动作总是有一个void 返回类型。 void 返回类型不需要也不能指定为泛型类型参数。相比之下,Func 委托定义了“真正的”返回类型,并且始终具有至少一个用于返回类型的泛型类型参数。参考here
Func<TResult> public delegate TResult Func<TResult>()
Func<T,TResult> public delegate TResult Func<T,TResult>(T arg)
Func<T1,T2,TResult> public delegate TResult Func<T1,T2,TResult>(T1 arg1, T2 arg2)
...
.NET Framework 4.0 为泛型类型参数添加了in 和out 修饰符以实现逆变和协变。请参阅:Covariance and Contravariance in Generics。例子:
public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2)
public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2)