是不是;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的情况下,它已经在许多语言中了?
您误解了继承。
Employee
继承Person
,仅Person
继承了Object
。
Employee
通过Person
间接继承了Object
由于Person
位于Employee
和Object
之间,因此不存在MI问题。
当人们讨论多重继承时,通常是指直接从两个父类继承。
实例方法调用的正常解决方案是沿着继承继承层向上移动,并在方法的第一个定义处停止。
直接从两个父类继承的能力引入了钻石问题,这是许多人认为多重继承是个坏主意的主要原因。对于多个父类,在两个父类中,可以以不同的方式覆盖从上面作为接口一部分所需的内容,并且没有明确的选择来使用。
不同的语言以不同的方式处理这一问题,而C#和Java实际上都是通过不允许多重继承来处理的,