Sí, hay diferentes sobrecargas de Action
tomando un número diferente de parámetros de entrada y teniendo un tipo de retorno 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)
...
La primera línea es lo que estás buscando.
Las versiones más nuevas de Framework han agregado sobrecargas con aún más argumentos. número máximo de argumentos:
- .NET Framework 2.0:
- .NET Framework 3.5:
- .NET Framework 4.0:
- Silverlight:
acciones tienen siempre un tipo de devolución void
. Un tipo de devolución void
no necesita y no se puede especificar como parámetro de tipo genérico. Por el contrario, los delegados Func
definir los tipos de retorno "reales" y tener siempre al menos un parámetro de tipo genérico para el tipo de retorno:
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 ha añadido in
y out
modificadores de tipo genérico parámetros para contravarianza y covarianza. Ver: Covariance and Contravariance in Generics. Ejemplos:
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)
@Anthony Pegram: Pero tienen que rellenar un tipo en una acción y de vacío no es una posibilidad (voy a editar mi pregunta, he cometido un error). –