why que funcion examples example delegate delegado c# delegates strategy-pattern

que - uses of delegates in c#



en c#¿cuál es la diferencia entre el patrón de estrategia y los delegados? (5)

¿De qué otra forma implementarías el patrón de estrategia en C #?

He estado buscando ejemplos de implementación de patrones de estrategia y me parece que son muy similares a los delegados de c #. La única diferencia que veo es que las implementaciones de patrones de estrategia no necesitan declarar explícitamente un delegado.

Pero aparte de eso, ambos parecen apuntar a funciones que necesitan una firma específica y ambas pueden usarse para determinar qué ejecutar en tiempo de ejecución.

¿Hay una diferencia más obvia que me estoy perdiendo?

Supongo que una pregunta relacionada sería, SI son similares, ¿cuál es la ventaja de usar una sobre la otra?


El patrón de estrategia es un patrón de diseño que le permite elegir distintas funciones en el tiempo de ejecución, mientras que un delegado es una construcción de lenguaje que le permite crear una referencia a una función y usarla como una variable.

El patrón de estrategia se implementa mejor con polimorfismo en lugar de delegados, ya que el envío polimórfico tiende a ser más elegante.


En pocas palabras, puede usar delegados para implementar el patrón de estrategia.

El patrón de estrategia es un patrón. Los delegados son una función de idioma. Utiliza la función de idioma para implementar el patrón. Residen en dos categorías separadas de conceptos en total, pero se relacionan en su interacción entre sí.

En otras palabras, el patrón de estrategia es el modelo, los delegados de C # son los ladrillos. No puedes construir la casa (patrón de estrategia) sin ninguno. (También podría compilarlo con otros tipos de ladrillos, pero nada en la función de idioma de los delegados describe intrínsecamente el patrón de estrategia).


Los patrones de diseño son soluciones de alto nivel, independientes del idioma, para problemas comunes.

Los delegados se pueden utilizar en una implementación específica de plataforma del patrón de estrategia para .NET, pero no son la única forma de implementar dicha solución.

Una solución alternativa es definir una interfaz como:

public interface IStrategy { void DoStuff(...) }

Las estrategias serían representadas por las clases que implementan esta interfaz, en lugar de por un delegado.

Los delegados pueden ser una buena implementación si espera que sus estrategias sean muy simples. Para cualquier cosa razonablemente compleja, la implementación de estrategias como interfaces le ofrece muchas más opciones cuando se trata de mantener el seguimiento del estado, organizar las cosas en múltiples métodos, compartir códigos entre implementaciones, etc.


Los patrones son una cuestión de arquitectura. Los delegados son una cuestión de implementación.

En C #, casi siempre se implementará un patrón de estrategia usando un delegado.