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

本文关键字:多重继承 CLR 支持 是不是 | 更新日期: 2023-09-27 17:57:44

这要么必须讨论,要么我太愚蠢了。关于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的情况下,它已经在许多语言中了?

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

您误解了继承。

Employee继承Person
Person继承了Object

Employee通过Person间接继承了Object
由于Person位于EmployeeObject之间,因此不存在MI问题。

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

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

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

不同的语言以不同的方式处理这一问题,而C#和Java实际上都是通过不允许多重继承来处理的,