是不是C#或底层CLR真的支持多重继承?

时间:2013-02-05 22:53:47

标签: c# inheritance multiple-inheritance

这必须要么讨论,要么我非常愚蠢。有很多类似的线程,为什么C#没有MI,我已经走了最多。但我很想知道C#是否已经暗中支持它了。

由于.NET中的每个类型都派生自System.Object,我可以将类编写为

Person : object { }

现在,如果我有

Employee : Person { }

不是吗

Employee : object, Person { }

1)Employee类是否已从两个类继承?

这里存在多重继承的所有问题太对了吗?让我说我有这个:

Person : object
{
    new public Type GetType()
    {
        return null;
    } 
}

Employee : object, Person 
{ 

}

2)现在,如果我致电Employee.GetType(),是否应致电Person.GetType()object.GetType()?困惑是对的。在MI的情况下,我觉得C#不能为objectas its already in many languages提供某种继承优先权吗?

2 个答案:

答案 0 :(得分:11)

你误解了继承。

Employee继承Person Person继承Object

Employee通过Object间接继承Person 间接
由于Person位于EmployeeObject之间,因此没有MI问题。

答案 1 :(得分:2)

当人们讨论多重继承时,他们通常意味着直接从两个父类继承。

实例方法调用的正常分辨率是向上传递继承层,并在方法的第一个定义处停止。

能够直接从引入Diamond Problem的两个父类继承,这是许多人认为多重继承是个坏主意的主要原因。对于多个父项,在两个父类中可以不同地覆盖从高处接口作为接口的一部分所需的东西,并且没有明确的选择可供使用。

不同的语言以不同的方式处理这个问题,而C#和Java确实都是通过简单地不允许多重继承来处理它,