我最近进行了practice C# skills测试,其中一个问题是,
C#是否支持多重继承?
我回答是,并且标记错了。经过一些网上研究,它充满了为什么不支持它的答案:
Multiple inheritance support in C#
Why is Multiple Inheritance not allowed in Java or C#?
http://www.codeproject.com/Questions/652495/Why-does-csharp-doesnt-support-Multiple-inheritanc
然后我去尝试复制我在尝试从已经从基类继承的类继承时应该得到的错误,并且没有错误。我正在使用控制台应用程序,我最近升级到.net 4.5,也许情况发生了变化?
我测试的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Leo bk = new Leo();
bk.avgWords();
Console.ReadLine();
}
public void bubbleSort(int[] input)
{
}
public void insertionSort(int[] input)
{
}
}
public class Gatsby : Books
{
public override void avgWords()
{
Console.WriteLine(5);
}
}
public class Leo : Gatsby
{
public override void avgWords()
{
Console.WriteLine(7);
}
}
public class Dicaprio : Leo
{
}
public class Books
{
public int id { get; set; }
public string title { get; set; }
public string author { get; set; }
public virtual void avgWords()
{
Console.WriteLine(3);
}
}
}
答案 0 :(得分:10)
然后我去尝试复制我在尝试从已经从基类继承的类继承时应该得到的错误,并且没有错误。我正在使用控制台应用程序,我最近升级到.net 4.5,也许情况发生了变化?
不,这仍然被认为是单继承。您的类只从一个基类继承。
某些语言(如C ++)允许您从多个类继承。 C#版本类似于:
class Foo {}
class Bar {}
// This is invalid in C#!
class Baz : Foo, Bar {}
然而,这是不允许的。
请注意,C# 允许您实现多个接口。
答案 1 :(得分:4)
C#是否支持多重继承?
您不能从多个基类继承,但与COM一样,您可以通过多个接口和containment and delegation重用多个基类:
// class C1 implements interface I1
interface I1
{
void M1();
}
class C1 : I1
{
public void M1() { Console.WriteLine("C1.M1"); }
}
// class C2 implements interface I2
interface I2
{
void M2();
}
class C2 : I2
{
public void M2() { Console.WriteLine("C2.M2"); }
}
// class C reuses C1 and C2
// it implements I1 and I2 and delegates them accordingly
class C: I1, I2
{
C1 c1;
C2 c2;
void I1.M1() { c1.M1(); }
void I2.M2() { c2.M2(); }
}
答案 2 :(得分:3)
它们可能意味着类可以派生自两个或更多基类,但它不能。令人困惑的措辞。
public abstract class A1;
public abstract class A2;
public abstract class B : A2;
public class C : A1, A2; // invalid
public class D : B; // valid
答案 3 :(得分:2)
Multiple inheritance允许类从多个父类继承。 C#不允许多重继承;这并不意味着一个类的特征只能继承一次。
可以通过接口使用多个“实现”:
interface IInterface
{
...
}
interface IAnotherInterface
{
...
}
class MyClass : IInterface, IAnotherInterface
{
...
}
答案 4 :(得分:0)
这不被认为是多重的,但它是一个多层次的或连锁的。
多个遗嘱是例如你有3个A,B和C类。 C类同时继承A和B类。
多个遗留问题及其不支持的原因是因为如果在A和B类中有一个具有相同名称且具有不同实现的方法,并且您希望在C类中使用该方法,那么C类会混淆应该使用哪种方法。为防止混淆和歧义,C#不支持多个遗漏。