Да, существуют различные перегрузки 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)
...
Первая строка - это то, что вы ищете.
В более новых версиях Framework добавлены перегрузки с еще большим количеством аргументов.Максимальное количество аргументов:
- .NET Framework 2.0: 1
- .NET Framework 3.5: 4
- .NET Framework 4.0: 16
- Silverlight: 16
Действия всегда имеют тип возврата void
.void
возвращаемый тип не требуется и не может быть указан в качестве параметра универсального типа.Напротив, делегаты Func
определяют «реальные» возвращаемые типы и всегда имеют хотя бы один параметр универсального типа для возвращаемого типа:
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
модификаторы общих параметров типа для контравариантности и ковариации.См .: Ковариация и Контравариантность в Обобщениях .Примеры:
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)