Saltar al contenido

Delegados vs Interfaces en C#

Te damos el resultado a este conflicto, al menos eso deseamos. Si tienes interrogantes coméntalo, que sin tardanza

Solución:

Sí, los delegados son, en muchos sentidos, como interfaces de método único. Sin embargo:

  • Hay soporte integrado en el CLR para ellos.
  • Hay soporte en el marco para ellos, incluidas habilidades de transmisión múltiple e invocación asincrónica.
  • Hay compatibilidad adicional con el lenguaje C#/VB en forma de conversiones de grupos de métodos, expresiones lambda, métodos anónimos
  • Son obligatorios para eventos (es decir, eventos y delegados son una especie de par coincidente)
  • se refieren a ti no necesita implementar una interfaz en una clase separada para cada instancia de delegado que desee crear.

El último punto es el más importante: considere una expresión LINQ de:

var query = collection.Where(x => x > 5)
                      .Select(x => x * x);

Ahora imagina si para expresar la lógica de x > 5 y x * x tenía que escribir una clase separada para cada expresión e implementar una interfaz: la cantidad de código cruft vs útil sería ridícula. Ahora, por supuesto, el idioma. pudo han sido diseñados para permitir conversiones de expresiones lambda en implementaciones de interfaz a través de clases separadas, pero aún perdería el beneficio de poder simplemente escribir un método separado y crear un delegado con eso como objetivo. También perderías las habilidades de lanzamiento múltiple.

Como un ejercicio de pensamiento similar, considere declaraciones en bucle como while y for. ¿realmente necesitar ellos cuando tenemos goto? No. Pero la vida es mucho mejor. con ellos. lo mismo es true de delegados y, de hecho, propiedades, eventos, etc. Todos ellos simplifican el desarrollo.

el mas grande práctico la diferencia es que puede proporcionar diferentes instancias de delegado para el mismo delegado de la misma clase, mientras que no puede hacerlo con interfaces.

delegate void XYZ(int p);

interface IXyz 
    void doit(int p);


class One 
    // All four methods below can be used to implement the XYZ delegate
    void XYZ1(int p) ...
    void XYZ2(int p) ...
    void XYZ3(int p) ...
    void XYZ4(int p) ...


class Two : IXyz 
    public void doit(int p) 
        // Only this method could be used to call an implementation through an interface
    

De Cuándo usar delegados en lugar de interfaces (MSDN):

Tanto los delegados como las interfaces permiten que un diseñador de clases separe las declaraciones y la implementación de tipos. Una interfaz dada puede ser heredada e implementada por cualquier clase o estructura. Se puede crear un delegado para un método en cualquier clase, siempre que el método se ajuste a la firma del método para el delegado. Un objeto que no tiene conocimiento de la clase que implementa la interfaz o el método de delegado puede usar una referencia de interfaz o un delegado. Dadas estas similitudes, ¿cuándo debería un diseñador de clases usar un delegado y cuándo debería usar una interfaz?

Utilice un delegado en las siguientes circunstancias:

  • Se utiliza un patrón de diseño de eventos.
  • Es deseable encapsular un static método.
  • La persona que llama no tiene necesidad de acceder a otras propiedades, métodos o interfaces en el objeto que implementa el método.
  • Se desea una composición fácil.
  • Una clase puede necesitar más de una implementación del método.

Utilice una interfaz en las siguientes circunstancias:

  • Hay un grupo de métodos relacionados que se pueden llamar.
  • Una clase solo necesita una implementación del método.
  • La clase que usa la interfaz querrá convertir esa interfaz a otra interfaz o tipos de clase.
  • El método que se implementa está vinculado al tipo o identidad de la clase: por ejemplo, métodos de comparación.

Un buen ejemplo del uso de una interfaz de método único en lugar de un delegado es IComparable o la versión genérica, IComparable(De T). IComparable declara el método CompareTo, que devuelve un entero que especifica una relación menor que, igual o mayor que entre dos objetos del mismo tipo. IComparable se puede utilizar como base de un algoritmo de clasificación. Aunque sería válido usar un método de comparación de delegados como base de un algoritmo de ordenación, no es lo ideal. Debido a que la capacidad de comparar pertenece a la clase y el algoritmo de comparación no cambia en tiempo de ejecución, una interfaz de método único es ideal.

De Delegados Vs Interfaces en C#:

Los delegados y las interfaces son dos conceptos distintos en C# pero comparten algo en común. Tanto los delegados como las interfaces solo incluyen la declaración. La implementación se realiza mediante un objeto de programación diferente.

Puntuaciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *