Solución:
Tu redacción es confusa. Quizás te refieres a “una función sin un tipo de retorno y sin parámetros “. Simplemente existe System.Action.
Action action = () => Console.WriteLine("hello world");
action();
De tu comentario:
Pero necesito completar un
<T>
escriba una acción y no hay posibilidad de anularla (editaré mi pregunta, cometí un error).
Esto indica un malentendido. El delegado de T en la acción es un aporte. El vacío es el producción. Un delegado de Acción es inherentemente un delegado que regresa sin efecto. La T es el tipo de aporte puede actuar sobre los parámetros que luego proporcionaría con argumentos.
En cualquier caso, como muestran esta respuesta y otras, puede tener un delegado de acción sin ningún T, un delegado que no toma entradas.
Sí, hay diferentes sobrecargas de Action
tomando un nmero diferente de parmetros de entrada y teniendo un void
tipo de retorno.
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 busca.
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: 1
- .NET Framework 3.5: 4
- .NET Framework 4.0: dieciséis
- Silverlight: dieciséis
Las acciones siempre tienen un void
tipo de retorno. A void
El tipo de retorno no necesita ni puede especificarse como parámetro de tipo genérico. Por el contrario, el Func
los delegados definen tipos de retorno “reales” y siempre tienen al menos un parámetro de tipo genérico para el tipo de retorno. Consulte aquí
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 agregado in
y out
modificadores de los parámetros de tipo genérico para contravarianza y covarianza. Ver: Covarianza y contravarianza en genéricos. 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)
Lo que estás buscando es una acción. No toma parámetros y no devuelve ningún valor.