Los delegados proporcionan una forma de pasar el comportamiento como parámetro.
Los ejemplos comunes son los eventos y la programación asincrónica donde algo más que su objeto es responsable de llamar a su objeto. Proporciona ese evento a un delegado y ahora puede ejecutar el comportamiento asociado con ese delegado.
Esto también puede ser una técnica útil al implementar un algoritmo general. Ha habido ocasiones en las que estoy escribiendo varios métodos que son muy similares. Tal vez recorren el mismo conjunto de datos, pero realizan tareas ligeramente diferentes. Puedo pasar un delegado a una sola función para realizar esa tarea, luego llamar al delegado desde dentro del ciclo sobre los datos. De esta manera, no tengo que implementar el ciclo sobre los datos varias veces, solo tengo que escribir un nuevo código que haga cosas nuevas: el comportamiento común se captura de una manera común.
En respuesta al comentario:
La diferencia entre llamar el delegado de dentro del bucle y de llamar al método desde dentro del bucle es que el delegado es un parámetro a la función que contiene el bucle. Esto significa que esa función podría hacer cualquier cosa, no solo lo que se define dentro de un método en particular.Esa flexibilidad se puede y se ha aprovechado para suministrar algoritmos genéricos en bibliotecas completamente independientes de los detalles de con qué están trabajando los algoritmos. Linq es un buen ejemplo de la generalidad permitida a través de la flexibilidad de los delegados.
Hay muchas preguntas similares, como esta: http://stackoverflow.com/questions/31497/where-do-i-use-delegates –
O este: http://stackoverflow.com/questions/628803/delegate-usage-business-applications –
O este: http://stackoverflow.com/questions/635015/when-would-i-use-a-delegate-in-asp-net –