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 G1
y G2
con 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