C# | Herencia múltiple usando interfaces

En herencia múltiple, una clase puede tener más de una superclase y heredar características de todas sus clases principales. Como se muestra en el siguiente diagrama, la clase C hereda las características de las clases A y B.

Pero C# no admite la herencia de clases múltiples. Para superar este problema, usamos interfaces para lograr la herencia de múltiples clases. Con la ayuda de la interfaz , la clase C (como se muestra en el diagrama anterior) puede obtener las características de las clases A y B.

Ejemplo 1: en primer lugar, tratamos de heredar las características de las clases Geeks1 y Geeks2 en la clase GeeksforGeeks, luego el compilador dará un error porque C# directamente no admite la herencia de clases múltiples.

// C# program to illustrate
// multiple class inheritance
using System;
using System.Collections;
  
// Parent class 1
class Geeks1 {
  
    // Providing the implementation
    // of languages() method
    public void languages()
    {
  
        // Creating ArrayList
        ArrayList My_list = new ArrayList();
  
        // Adding elements in the
        // My_list ArrayList
        My_list.Add("C");
        My_list.Add("C++");
        My_list.Add("C#");
        My_list.Add("Java");
  
        Console.WriteLine("Languages provided by GeeksforGeeks:");
        foreach(var elements in My_list)
        {
            Console.WriteLine(elements);
        }
    }
}
  
// Parent class 2
class Geeks2 {
  
    // Providing the implementation
    // of courses() method
    public void courses()
    {
  
        // Creating ArrayList
        ArrayList My_list = new ArrayList();
  
        // Adding elements in the
        // My_list ArrayList
        My_list.Add("System Design");
        My_list.Add("Fork Python");
        My_list.Add("Geeks Classes DSA");
        My_list.Add("Fork Java");
  
        Console.WriteLine("\nCourses provided by GeeksforGeeks:");
        foreach(var elements in My_list)
        {
            Console.WriteLine(elements);
        }
    }
}
  
// Child class
class GeeksforGeeks : Geeks1, Geeks2 {
}
  
public class GFG {
  
    // Main method
    static public void Main()
    {
  
        // Creating object of GeeksforGeeks class
        GeeksforGeeks obj = new GeeksforGeeks();
        obj.languages();
        obj.courses();
    }
}

Error de tiempo de ejecución:

prog.cs(61, 30): error CS1721: `GeeksforGeeks’: las clases no pueden tener varias clases base (`Geeks1′ y `Geeks2′)
prog.cs(35, 7): (Ubicación del símbolo relacionado con el error anterior)

Pero podemos heredar indirectamente las características de las clases Geeks1 y Geek2 en la clase GeeksforGeeks usando interfaces. Como se muestra en el siguiente diagrama.

Ejemplo 2: las interfaces GFG1 y GFG2 están implementadas por las clases Geeks1 y Geeks2. Ahora las clases Geeks1 y Geeks2 definen el método languages() y los cursos(). Cuando una clase GeeksforGeeks hereda las interfaces GFG1 y GFG2, no es necesario redefinir los métodos de idiomas() y cursos() , simplemente cree los objetos de la clase Geeks1 y Geeks2 y acceda al método de idiomas() y cursos() utilizando estos objetos en la clase GeeksforGeeks.

// C# program to illustrate how to
// implement multiple class inheritance
// using interfaces
using System;
using System.Collections;
  
// Interface 1
interface GFG1 {
    void languages();
}
  
// Parent class 1
class Geeks1 : GFG1 {
  
    // Providing the implementation
    // of languages() method
    public void languages()
    {
  
        // Creating ArrayList
        ArrayList My_list = new ArrayList();
  
        // Adding elements in the
        // My_list ArrayList
        My_list.Add("C");
        My_list.Add("C++");
        My_list.Add("C#");
        My_list.Add("Java");
  
        Console.WriteLine("Languages provided by GeeksforGeeks:");
        foreach(var elements in My_list)
        {
            Console.WriteLine(elements);
        }
    }
}
  
// Interface 2
interface GFG2 {
    void courses();
}
  
// Parent class 2
class Geeks2 : GFG2 {
  
    // Providing the implementation
    // of courses() method
    public void courses()
    {
  
        // Creating ArrayList
        ArrayList My_list = new ArrayList();
  
        // Adding elements in the
        // My_list ArrayList
        My_list.Add("System Design");
        My_list.Add("Fork Python");
        My_list.Add("Geeks Classes DSA");
        My_list.Add("Fork Java");
  
        Console.WriteLine("\nCourses provided by GeeksforGeeks:");
        foreach(var elements in My_list)
        {
            Console.WriteLine(elements);
        }
    }
}
  
// Child class
class GeeksforGeeks : GFG1, GFG2 {
  
    // Creating objects of Geeks1 and Geeks2 class
    Geeks1 obj1 = new Geeks1();
    Geeks2 obj2 = new Geeks2();
  
    public void languages()
    {
        obj1.languages();
    }
  
    public void courses()
    {
        obj2.courses();
    }
}
  
// Driver Class
public class GFG {
  
    // Main method
    static public void Main()
    {
  
        // Creating object of GeeksforGeeks class
        GeeksforGeeks obj = new GeeksforGeeks();
        obj.languages();
        obj.courses();
    }
}

Producción:

Languages provided by GeeksforGeeks:
C
C++
C#
Java

Courses provided by GeeksforGeeks:
System Design
Fork Python
Geeks Classes DSA
Fork Java

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 *