2

这必须要么讨论,要么我非常愚蠢。关于为什么 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()?混淆是正确的。我觉得 C# 是不是神奇地为类提供了某种继承优先object级,因为它在MI 的情况下已经在许多语言中出现了?

4

2 回答 2

11

你误解了继承。

Employee继承Person只有
Person继承Object.

EmployeeObject 间接继承,通过Person.
因为Person介于Employee和之间Object,所以不存在 MI 问题。

于 2013-02-05T22:54:57.517 回答
2

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

实例方法调用的正常解决方案是沿着继承层次结构向上移动并在方法的第一个定义处停止。

直接从两个父类继承的能力引入了钻石问题,这是许多人认为多重继承是一个坏主意的主要原因。对于多个父类,作为上层接口的一部分所需的东西可以在两个父类中以不同方式覆盖,并且没有明确的选择使用哪个。

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

于 2013-02-05T23:01:29.733 回答