Todos los delegados de Func devuelven un valor. ¿Qué son los delegados .NET que se pueden usar con métodos que vuelven inválidos?Delegado de Func sin devolución tipo
Respuesta
Todos los delegados de Func devuelven algo; todos los delegados de Acción devuelven el vacío.
Func<TResult>
no tiene argumentos y devuelve TResult:
public delegate TResult Func<TResult>()
Action<T>
toma un argumento y no devuelve un valor:
public delegate void Action<T>(T obj)
Action
es el más simple, delegado 'desnuda':
public delegate void Action()
También hay Func<TArg1, TResult>
y Action<TArg1, TArg2>
(y otros hasta 16 argumentos). Todos estos (excepto Action<T>
) son nuevos en .NET 3.5 (definido en System.Core).
Trate System.Func<T>
y System.Action
no creo que existan las 0 arg y otras cosas en .Net 2.0, sin embargo. – Brian
Es extraño: Func no existe en .Net 2.0, aunque Predicate y Action lo hacen. –
Para .NET 2.0 use el delegado de MethodInvoker. –
... no tiene argumentos y tiene un tipo de retorno void?
Creo que Action
es una solución a esto.
Todos los delegados Func tomar por lo menos un parámetro
eso no es verdad. Todos toman al menos un argumento de tipo, pero ese argumento determina el tipo de retorno.
Entonces Func<T>
no acepta parámetros y devuelve un valor. Use Action
o Action<T>
cuando no desee devolver un valor.
vez en cuando se desee escribir un delegado para la gestión de eventos, en cuyo caso se puede tomar ventaja de System.EvenHandler<T>
que implícitamente acepta un argumento de tipo object
además del segundo parámetro que debe derivar de EventArgs
. EventHandlers devolverá void
Personalmente encontré esto útil durante las pruebas para crear una devolución de llamada única en un cuerpo de función.
Una forma muy fácil de invocar subrutinas de valor devuelto y no devuelto. está utilizando Func y Acción respectivamente. (ver también https://msdn.microsoft.com/en-us/library/018hxwa8(v=vs.110).aspx)
probar este este ejemplo
using System;
public class Program
{
private Func<string,string> FunctionPTR = null;
private Func<string,string, string> FunctionPTR1 = null;
private Action<object> ProcedurePTR = null;
private string Display(string message)
{
Console.WriteLine(message);
return null;
}
private string Display(string message1,string message2)
{
Console.WriteLine(message1);
Console.WriteLine(message2);
return null;
}
public void ObjectProcess(object param)
{
if (param == null)
{
throw new ArgumentNullException("Parameter is null or missing");
}
else
{
Console.WriteLine("Object is valid");
}
}
public void Main(string[] args)
{
FunctionPTR = Display;
FunctionPTR1= Display;
ProcedurePTR = ObjectProcess;
FunctionPTR("Welcome to function pointer sample.");
FunctionPTR1("Welcome","This is function pointer sample");
ProcedurePTR(new object());
}
}
Gracias por este fragmento de código, que podría proporcionar alguna ayuda limitada e inmediata. Una [explicación adecuada mejoraría en gran medida su valor a largo plazo] (// meta.stackexchange.com/q/114762/350567) al mostrar * por qué * esta es una buena solución al problema y lo haría más útil para el futuro lectores con otras preguntas similares. Por favor [edite] su respuesta para agregar alguna explicación, incluidas las suposiciones que ha hecho. – iBug
... no tiene argumentos y tiene un tipo de retorno void?
Si usted está escribiendo para System.Windows.Forms
, También puede utilizar:
public delegate void MethodInvoker()
- 1. delegado C# Func con el tipo params
- 2. ¿Cómo obtengo el tipo de devolución de un tipo delegado a través de la reflexión?
- 3. Devolución genérica sin saber tipo
- 4. void Func sin argumentos
- 5. Delegado de Func con la variable de referencia
- 6. favor explicar acerca de Func delegado en .NET 4.0
- 7. Tipo seguro de invocación de delegado asíncrono en C#
- 8. C# genéricos no permitirá Delegado Tipo Restricciones
- 9. Tipo de devolución vararg?
- 10. Func <T> sin el parámetro
- 11. iPhone - MFMailComposeViewController delegado incompatible tipo
- 12. Liberación de un objeto delegado en su método de devolución de delegado
- 13. efecto inesperado de conversión implícita de tipo de delegado inferencia
- 14. SDK de Dropbox - linkFromController: ¿delegado o devolución de llamada?
- 15. Obtenga el tipo de devolución real de una instancia de expresión <Func <T, object>>
- 16. ¿Qué tiene de bueno Func <> delegate?
- 17. usa Func <> (o Acción <>) o crea un delegado propio?
- 18. botón sin devolución de datos?
- 19. UIPopoverController descarta sin llamada de delegado
- 20. TypeScript: tipo de devolución vacía convertida a cualquier tipo?
- 21. tipo de devolución del constructor en C++
- 22. Func vs Acción contra predicado
- 23. C# delegado genérico sin parámetro - definir y llamar
- 24. ¿Por qué los argumentos de expresión lambda son ambiguos entre Func y Expresión <Func>?
- 25. Recursión con Func
- 26. Pasar un delegado como un parámetro de tipo y usarlo arroja el error CS0314
- 27. Tipo específico de devolución dentro de Haskell
- 28. Tipo de devolución genérico de Java
- 29. Un tipo de parámetro arruinó mi Func <shui>
- 30. ¿Por qué un delegado sin parámetros compila?
FYI, la próxima versión de la biblioteca de clases base incluirá Func y tipos de acciones que admiten más de cuatro parámetros formales. No recuerdo exactamente lo grande que se ponen. –
No había escuchado eso, ¡gracias por la información de Eric! –
En .NET 4.0, ahora suben a 8 parámetros. Si continúan así, ¡en la próxima versión subirán a once! 11! –