这必须要么讨论,要么我非常愚蠢。有很多类似的线程,为什么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#不能为object
类as its already in many languages提供某种继承优先权吗?
答案 0 :(得分:11)
你误解了继承。
Employee
继承Person
,仅
Person
继承Object
。
Employee
通过Object
间接继承Person
间接。
由于Person
位于Employee
和Object
之间,因此没有MI问题。
答案 1 :(得分:2)
当人们讨论多重继承时,他们通常意味着直接从两个父类继承。
实例方法调用的正常分辨率是向上传递继承层,并在方法的第一个定义处停止。
能够直接从引入Diamond Problem的两个父类继承,这是许多人认为多重继承是个坏主意的主要原因。对于多个父项,在两个父类中可以不同地覆盖从高处接口作为接口的一部分所需的东西,并且没有明确的选择可供使用。
不同的语言以不同的方式处理这个问题,而C#和Java确实都是通过简单地不允许多重继承来处理它,