C # | Множественное наследование с использованием интерфейсов

Опубликовано: 6 Марта, 2022

При множественном наследовании один класс может иметь более одного суперкласса и наследовать функции от всех своих родительских классов. Как показано на диаграмме ниже, класс C наследует функции классов A и B.

Но C # не поддерживает множественное наследование классов. Чтобы решить эту проблему, мы используем интерфейсы для достижения множественного наследования классов. С помощью интерфейса класс C (как показано на диаграмме выше) может получить функции классов A и B.

Example 1: First of all, we try to inherit the features of Geeks1 and Geeks2 class into GeeksforGeeks class, then the compiler will give an error because C# directly does not support multiple class inheritance.

// 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(" Courses 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();
    }
}

Ошибка выполнения:

prog.cs(61, 30): error CS1721: `GeeksforGeeks’: Classes cannot have multiple base classes (`Geeks1′ and `Geeks2′)
prog.cs(35, 7): (Location of the symbol related to previous error)

Но мы можем косвенно унаследовать особенности классов Geeks1 и Geek2 в класс GeeksforGeeks, используя интерфейсы. Как показано на диаграмме ниже.

Example 2: Both GFG1 and GFG2 interfaces are implemented by Geeks1 and Geeks2 class. Now Geeks1 and Geeks2 class define languages() and courses() method. When a GeeksforGeeks class inherits GFG1 and GFG2 interfaces you need not to redefine languages() and courses() method just simply create the objects of Geeks1 and Geeks2 class and access the languages() and courses() method using these objects in GeeksforGeeks class.

// 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(" Courses 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();
    }
}

Выход:

Языки, предоставляемые GeeksforGeeks:
C
C ++
C #
Джава

Курсы, предоставляемые GeeksforGeeks:
Системный дизайн
Вилка Python
Гики Классы DSA
Вилка Java
C#