为什么我不能从多个类继承?

Nic*_*Ory 1 .net c#

C# 为什么要这样设计?能够从无限的类派生有哪些缺点?(我知道大多数情况下你可以使用接口)

Joh*_* Wu 5

多重继承导致了钻石问题

“钻石问题”(有时称为“死亡钻石”)是当两个类 B 和 C 继承自 A,而类 D 继承自 B 和 C 时出现的歧义。如果 A 中有一个方法B和C都重写了,而D没有重写它,那么D继承了哪个版本的方法:B的还是C的?

例如,在GUI软件开发的上下文中,类Button可以从类矩形(用于外观)和可点击类(用于功能/输入处理)继承,并且类矩形和可点击都从对象类继承。现在,如果为 Button 对象调用 equals 方法,并且 Button 类中没有此类方法,但 Rectangle 或 Clickable(或两者)中存在重写的 equals 方法,那么最终应该调用哪个方法?

由于这种情况下类继承图的形状,它被称为“钻石问题”。在这种情况下,A 类位于顶部,B 类和 C 类分别位于其下方,D 类在底部将两者连接在一起形成菱形。

钻石图

另外,来自 c# 开发团队:

真正适合MI的地方其实很少。在许多情况下,多个接口继承可以完成这项工作。在其他情况下,您也许可以使用封装和委托。如果我们添加一个稍微不同的结构,比如 mixins,那实际上会更强大吗?

多个实现继承给实现注入了很多复杂性。这种复杂性会影响铸造、布局、调度、现场访问、序列化、身份比较、可验证性、反射、泛型以及可能的许多其他地方。

关联