C# | Implementación de interfaz explícita

Una interfaz es una colección de elementos vinculados libremente que tienen una funcionalidad o atributos comunes. Las interfaces contienen firmas de métodos, propiedades, eventos, etc. Las interfaces se utilizan para que una clase o estructura pueda implementar múltiples comportamientos. C# no admite el concepto de herencia múltiple debido a la ambigüedad que provoca. Pero muchos objetos de la vida real heredan propiedades de más de un tipo, por lo que se utilizan interfaces en lugar de extender clases. 

Una interfaz consiste solo en las firmas y no en su implementación, por lo tanto, cualquier clase o estructura que la implemente debe proporcionar la implementación anulando.

¿Qué es la implementación de interfaz explícita y cuándo se usa?

Decirle explícitamente al compilador que un miembro en particular pertenece a esa interfaz en particular se denomina implementación de interfaz explícita. 
Si una clase se implementa desde más de una interfaz que tiene métodos con la misma firma, la llamada a dicho método implementará el mismo método y no los métodos específicos de la interfaz. Esto anulará todo el propósito de usar diferentes interfaces. Ahí es cuando la implementación explícita entra en escena. Al usar una implementación explícita, puede decirle al compilador qué método de interfaz está sobrecargando y puede proporcionar diferentes funcionalidades para métodos de diferentes interfaces. Lo mismo ocurre con cualquier otro tipo de miembro como una propiedad, un evento.

Sintaxis:

class ClassName : InterfaceName
{
    returnType InterfaceName.method()
    { 
          // Your Code 
    }
}

Ejemplo 1: Este programa muestra el uso de una implementación de interfaz explícita. Aquí tenemos dos interfaces I1 e I2 que tienen la misma firma de método llamada printMethod con tipo de retorno como void. La clase C implementa estas dos interfaces, por lo que usamos una implementación de interfaz explícita para distinguir entre los métodos.

C#

// C# Program to show the use of
// Explicit interface implementation
using System;
 
interface I1 {
 
    void printMethod();
}
 
interface I2 {
 
    void printMethod();
}
 
// class C implements two interfaces
class C : I1, I2 {
 
    // Explicitly implements method of I1
    void I1.printMethod()
    {
        Console.WriteLine("I1 printMethod");
    }
 
    // Explicitly implements method of I2
    void I2.printMethod()
    {
        Console.WriteLine("I2 printMethod");
    }
}
 
// Driver Class
class GFG {
 
    // Main Method
    static void Main(string[] args)
    {
        I1 i1 = new C();
        I2 i2 = new C();
 
        // call to method of I1
        i1.printMethod();
 
        // call to method of I2
        i2.printMethod();
    }
}
Producción: 

I1 printMethod
I2 printMethod

 

Ejemplo 2: aquí tenemos una pirámide de interfaz con un método dibujarPirámide . La clase Display hereda este método y proporciona una implementación que imprime una pirámide ‘ * ‘ en la pantalla. Usamos la implementación explícita para anular el método drawPyramid.

C#

// C# Program to show the use of
// Explicit interface implementation
using System;
 
interface Pyramid {
 
    // Method signature
    void drawPyramid();
}
 
// Implements Pyramid
class Display : Pyramid {
 
    // Using Explicit implementation
    void Pyramid.drawPyramid()
    {
        for (int i = 1; i <= 10; i++)
        {
            for (int k = i; k < 10; k++)
                Console.Write(" ");
 
            for (int j = 1; j <= (2 * i - 1); j++)
                Console.Write("*");
 
            Console.WriteLine();
        }
    }
}
 
// Driver Code
class GFG {
 
    // Main Method
    static void Main(string[] args)
    {
        // Create object of the class using Interface
        Pyramid obj = new Display();
 
        // call method
        obj.drawPyramid();
    }
}
Producción: 

         *
        ***
       *****
      *******
     *********
    ***********
   *************
  ***************
 *****************
*******************

 

Ejemplo 3: podemos usar una implementación de interfaz explícita para propiedades pares y básicamente para cualquier otro miembro de la interfaz. Aquí tenemos la propiedad X y el método X en la interfaz I1 e I2 respectivamente con los mismos nombres y tipos de retorno. Solo usamos la implementación de interfaz explícita en el método X. De esta forma, el compilador usará la propiedad X a menos que se especifique lo contrario.

C#

// C# Program to show the use of
// Explicit interface implementation
using System;
 
interface I1 {
 
    // Property X
    int X
    {
        set;
        get;
    }
}
 
interface I2 {
 
    // Method X
    int X();
}
 
class C : I1, I2 {
 
    int x;
 
    // Implicit implementation of
    // the property
    public int X
    {
        set { x = value; }
        get { return x; }
    }
 
    // Explicit implementation of
    // the method
    int I2.X()
    {
        return 0;
    }
}
 
// Driver Code
class GFG {
 
    // Main Method
    static void Main(string[] args)
    {
        C c = new C();
        I2 i2 = new C();
 
        // Invokes set accessor
        c.X = 10;
 
        // Invokes get accessor
        Console.WriteLine("Value of x set using X"+
                             " from I1 is " + c.X);
 
        // Call to the X method
        Console.WriteLine("Value returned by I2.X()"+
                                    " is " + i2.X());
    }
}
Producción: 

Value of x set using X from I1 is 10
Value returned by I2.X() is 0

 

Publicación traducida automáticamente

Artículo escrito por ManasiKirloskar 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 *