C# | Cómo implementar varias interfaces con el mismo nombre de método

Al igual que una clase, la interfaz puede tener métodos , propiedades , eventos e indexadores como miembros. Pero la interfaz contendrá 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.
C# permite la implementación de múltiples interfaces con el mismo nombre de método. Para comprender cómo implementar múltiples interfaces con el mismo nombre de método, tomamos un ejemplo. En este ejemplo, tomamos dos interfaces nombradas como G1y G2con el mismo nombre de método.

Ahora implemente estas interfaces en una clase llamada Geeks y defina el método mymethod() y cuando el usuario intente llamar a este método, dará un error porque no le dijimos al compilador que este método pertenece a qué interfaz.

Ejemplo:

// C# program to illustrate the concept
// of how to inherit multiple interfaces
// with the same method name
using System;
  
// Interface G1 and G2
// contains same method
interface G1 {
  
    // interface method
    void mymethod();
}
  
interface G2 {
  
    // interface method
    void mymethod();
}
  
// 'Geeks' implements both
// G1 and G2 interface
class Geeks : G1, G2 {
  
    // Defining method
    // this statement gives an error
    // because we doesn't specify
    // the interface name
    void mymethod()
    {
        Console.WriteLine("GeeksforGeeks");
    }
}
  
// Driver Class
public class GFG {
  
    // Main Method
    static public void Main()
    {
  
        // Creating object of Geeks
        // this statement gives an error
        // because we doesn't specify
        // the interface name
        Geeks obj = new Geeks();
  
        // calling method
        obj.mymethod();
    }
}

Error de tiempo de compilación:

prog.cs(22,7): error CS0737: ‘Geeks’ no implementa el miembro de interfaz ‘G1.mymethod()’ y el mejor candidato de implementación ‘Geeks.mymethod()’ no es público
prog.cs(11,7) : (Ubicación del símbolo relacionado con el error anterior)
prog.cs(28,7): (Ubicación del símbolo relacionado con el error anterior)
prog.cs(22,7): error CS0535: `Geeks’ no implementa el miembro de la interfaz `G2.mymethod()’
prog.cs(17,7): (Ubicación del símbolo relacionado con el error anterior)
prog.cs(48,7): error CS0122: `Geeks.mymethod()’ es inaccesible debido a su nivel de protección
prog.cs(28,7): (Ubicación del símbolo relacionado con el error anterior)

Para eliminar este error, especificaremos el nombre de la interfaz con el nombre del método como G1.mymethod(). Le dice al compilador que este método pertenece a la interfaz G1 . De igual forma, G2.mymethod()le dice al compilador que este método pertenece a la interfaz G2 .

Ejemplo:

// C# program to illustrate the concept 
// of how to inherit multiple interfaces 
// with the same method name
using System;
  
// Interface G1 and G2 
// contains same method
interface G1 {
      
    // method declaration
    void mymethod();
}
  
interface G2 {
      
    // method declaration
    void mymethod();
}
  
// Geeks implements both 
// G1 and G2 interface
class Geeks : G1, G2
{
    // Here mymethod belongs to 
    // G1 interface
    void G1.mymethod()
{
    Console.WriteLine("GeeksforGeeks");
}
      
    // Here mymethod belongs to 
    // G2 interface
    void G2.mymethod()
{
    Console.WriteLine("GeeksforGeeks");
}
}
  
// Driver Class
public class GFG {
      
    // Main Method
    static public void Main () {
          
        // Creating object of Geeks
        // of G1 interface
        G1 obj = new Geeks();
          
        // calling G1 interface method
        obj.mymethod();
          
        // Creating object of Geeks
        // of G2 interface
        G2 ob = new Geeks();
          
        // calling G2 interface method
        ob.mymethod();
    }
}

Producción :

GeeksforGeeks
GeeksforGeeks

Nota: también puede declarar el método como público en la clase que implementa las interfaces. Pero la confusión seguirá existiendo ya que en el programa grande un usuario no puede diferenciar qué método de qué interfaz se implementa.

Ejemplo:

// C# program to illustrate the concept
// of how to inherit multiple interfaces
// with the same method name by defining 
// the method as public in the class 
// which implements the interfaces.
using System;
  
// Interface G1 and G2
// contains same method
interface G1 {
  
    // interface method
    void mymethod();
}
  
interface G2 {
  
    // interface method
    void mymethod();
}
  
// 'Geeks' implement both
// G1 and G2 interface
class Geeks : G1, G2 {
  
    // Defining method as public
    public void mymethod()
    {
        Console.WriteLine("GeeksforGeeks");
    }
}
  
// Driver Class
public class GFG {
  
    // Main Method
    static public void Main()
    {
  
        // Creating object of Geeks
        Geeks obj = new Geeks();
  
        // calling method
        obj.mymethod();
    }
}

Producción:

GeeksforGeeks

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 *