Delegados vs Interfaces en C#

Un Delegado es un objeto que se refiere a un método o puede decir que es una variable de tipo de referencia que puede contener una referencia a los métodos. Los delegados en C# son similares al puntero de función en C/C++ . Proporciona una forma que indica qué método se llamará cuando se active un evento. Ejemplo: 

CSharp

// C# program to illustrate Delegates
using System;
 
class GFG {
 
    // Declaring the delegates
    public delegate void AddVal(int x, int y);
 
    public void SMeth(int x, int y)
    {
        Console.WriteLine("[{0} + {1}] = [{2}]",x,y, x + y);
    }
 
    // Main Method
    public static void Main(String[] args)
    {
 
        // Creating the object of GFG class
        GFG o = new GFG();
 
        // Creating object of delegate
        AddVal obj = new AddVal(o.SMeth);
 
        // Pass the values to the method
        // Using delegate object
        obj(190, 70);
    }
}
Producción

[190 + 70] = [260]

Al igual que una clase, la interfaz puede tener métodos, propiedades, eventos e indexadores como miembros. Pero las interfaces contendrán solo la declaración de los miembros. La implementación de los miembros de la interfaz estará dada por la clase que implementa la interfaz implícita o explícitamente. Ejemplo: 

CSharp

// C# program to illustrate the
// concept of interface
using System;
 
// A simple interface
interface inter {
 
    // method having only declaration
    // not definition
    void display();
}
 
// A class that implements the interface
class Geeks : inter {
 
    // providing the body part of function
    public void display()
    {
        Console.WriteLine("Welcome to GeeksforGeeks..!");
    }
 
    // Main Method
    public static void Main(String[] args)
    {
 
        // Creating object
        Geeks o = new Geeks();
 
        // calling method
        o.display();
    }
}

Producción:

Welcome to GeeksforGeeks..!

A continuación, se muestran algunas diferencias entre los delegados y las interfaces en C#:

Delegar Interfaz
Podría ser solo un método. Contiene métodos y propiedades.
Se puede aplicar a un método a la vez. Si una clase implementa una interfaz, implementará todos los métodos relacionados con esa interfaz.
Si hay un delegado disponible en su ámbito, puede usarlo. La interfaz se usa cuando su clase implementa esa interfaz, de lo contrario no.
Los delegados pueden implementarse cualquier número de veces. La interfaz se puede implementar solo una vez.
Está acostumbrado a manejar eventos. No se utiliza para el manejo de eventos.
Puede acceder a métodos anónimos. No puede acceder a métodos anónimos.
Cuando accede al método mediante delegados, no necesita ningún acceso al objeto de la clase donde se define el método. Cuando accede al método, necesita el objeto de la clase que implementó una interfaz.
No admite herencia. Es compatible con la herencia.
Puede envolver métodos estáticos y métodos de clase sellados. No envuelve métodos estáticos y métodos de clase sellados.
Se creó en tiempo de ejecución. Se creó en tiempo de compilación.
Puede implementar cualquier método que proporcione la misma firma con el delegado dado. Si se implementó el método de la interfaz, entonces el mismo nombre y método de firma se reemplazan.
Puede envolver cualquier método cuya firma sea similar a la del delegado y no considere a qué clase pertenece. Una clase puede implementar cualquier cantidad de interfaces, pero solo puede anular los métodos que pertenecen a las interfaces.

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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