在多重继承中, 一个类可以具有多个父类, 并且可以从其所有父类继承功能。如下图所示, 类C继承了类A和B的功能。
文章图片
但是C#不支持多类继承。为了克服这个问题, 我们使用接口来实现多个类的继承。借助接口, 类C(如上图所示)可以获得类A和B的功能。
示例1:首先, 我们尝试继承极客1和极客2类别转换为lsbin类别, 则编译器将给出错误信息, 因为C#直接不支持多个类继承。
//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 lsbin:" );
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 lsbin:" );
foreach ( var elements in My_list)
{
Console.WriteLine(elements);
}
}
}//Child class
class lsbin : Geeks1, Geeks2 {
}public class GFG {//Main method
static public void Main()
{//Creating object of lsbin class
lsbin obj = new lsbin();
obj.languages();
obj.courses();
}
}
运行时错误:
prog.cs(61, 30):错误CS1721:'lsbin':类不能具有多个基类('Geeks1'和'Geeks2')prog.cs(35, 7):(与先前错误相关的符号位置)但是我们可以使用接口将Geeks1和Geek2类的功能间接继承到lsbin类中。如下图所示。
示例2:都GFG1和GFG2接口由Geeks1和Geeks2类实现。现在, Geeks1和Geeks2类定义了language()和courses()方法。当lsbin类继承GFG1和GFG2接口时, 你无需重新定义语言()和培训班()方法只是简单地创建对象极客1和极客2上课并访问语言()和培训班()lsbin类中使用这些对象的方法。
//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 lsbin:" );
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 lsbin:" );
foreach ( var elements in My_list)
{
Console.WriteLine(elements);
}
}
}//Child class
class lsbin : 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 lsbin class
lsbin obj = new lsbin();
obj.languages();
obj.courses();
}
}
【C#使用接口的多重继承详细介绍】输出如下:
Languages provided by lsbin:CC++C#JavaCourses provided by lsbin:System DesignFork PythonGeeks Classes DSAFork Java
推荐阅读
- C#方法参数用法完整详细指南
- C# NumericUpDown类用法介绍
- C#多线程介绍和用法详细指南
- C#可选参数用法示例介绍
- C#谓词委托用法介绍
- C#程序查找出现的奇数次
- 用于最大总和连续子数组的C#程序
- C#编程语言入门学习指南提纲
- 不能加硬盘?C盘不够存储卡凑!