Estaba trabajando con los Delegados de Acción en C # con la esperanza de aprender más sobre ellos y pensar dónde podrían ser útiles.
¿Alguien ha usado el delegado de acción? Si es así, ¿por qué? ¿O podría dar algunos ejemplos donde podría ser útil?
MSDN dice:
Este delegado es utilizado por el método Array.ForEach y el método List.ForEach para realizar una acción en cada elemento de la matriz o lista.
Excepto eso, puede usarlo como un delegado genérico que toma 1-3 parámetros sin devolver ningún valor.
Aquí hay un pequeño ejemplo que muestra la utilidad del delegado de Action
Observe que el método foreach itera la colección de nombres y ejecuta el
print
método contra cada miembro de la colección. Esto es un cambio de paradigma para nosotros los desarrolladores de C # a medida que avanzamos hacia un estilo de programación más funcional. (Para obtener más información sobre la informática detrás de esto, lea esto: http://en.wikipedia.org/wiki/Map_(higher-order_function) .Ahora, si está utilizando C # 3, puede deslizar esto un poco hacia arriba con una expresión lambda como esta:
fuente
Bueno, una cosa que podrías hacer es si tienes un interruptor:
Y con el poder de las acciones, puede convertir ese interruptor en un diccionario:
...
O podrías llevar esto más lejos:
....
Solo un par de ejemplos. Por supuesto, el uso más obvio serían los métodos de extensión de Linq.
fuente
Puede usar acciones para controladores de eventos cortos:
fuente
Usé el delegado de acción como este en un proyecto una vez:
lo que todo lo que hace es almacenar una acción (llamada de método) contra un tipo de control para que pueda borrar todos los controles en un formulario a sus valores predeterminados.
fuente
Para un ejemplo de cómo se usa la Acción <>.
Console.WriteLine tiene una firma que satisface
Action<string>
.Espero que esto ayude
fuente
Lo uso cuando trato con llamadas de subprocesos ilegales. Por ejemplo:
Debo dar crédito al usuario 65358 de Reed Copsey SO por la solución. Mi pregunta completa con respuestas es SO Pregunta 2587930
fuente
Lo usé como devolución de llamada en un controlador de eventos. Cuando levanto el evento, paso un método tomando una cadena como parámetro. Así es como se ve el evento:
El método:
La es la declaración de clase del evento Args:
De esta manera puedo llamar al método pasado desde el controlador de eventos con algún parámetro para actualizar los datos. Lo uso para solicitar alguna información al usuario.
fuente
Usamos mucha funcionalidad de delegado de Action en las pruebas. Cuando necesitamos construir algún objeto predeterminado y luego necesitamos modificarlo. Hice un pequeño ejemplo. Para construir el objeto persona por defecto (John Doe) utilizamos la
BuildPerson()
función. Más tarde también agregamos a Jane Doe, pero modificamos su fecha de nacimiento, nombre y altura.fuente