dotnet不支持多重inheritance。 但多个接口支持?

可能重复:
C#中的多重inheritance

dotnet不支持多重inheritance。 但是多个接口支持。 为什么会出现这种行为。 任何具体原因??

您可以使用接口模拟多重inheritance。 如果允许使用类的多重inheritance,则会导致Diamond问题 。
由于不支持多inheritance的原因,我建议你阅读为什么C#不支持多重inheritance?

不同的语言实际上对MI的工作方式有不同的期望。 例如,如何解决冲突以及重复的基数是合并还是冗余。 在我们在CLR中实现MI之前,我们必须对所有语言进行调查,找出常见概念,并决定如何以语言中立的方式表达它们。 我们还必须决定MI是否属于CLS,这对于不想要这个概念的语言(例如VB.NET)意味着什么。 当然,这是我们作为公共语言运行时所处的业务,但我们还没有为MI做这件事。

MI真正适合的地方实际上非常小。 在许多情况下,多个接口inheritance可以完成工作。 在其他情况下,您可以使用封装和委派。 如果我们要添加一个稍微不同的构造,比如mixins,那实际上会更强大吗?

多实现inheritance为实现注入了很多复杂性。 这种复杂性会影响投射,布局,调度,现场访问,序列化,身份比较,可validation性,reflection,generics,以及可能还有很多其他地方。

yesinheritance意味着将属性从一个类对象获取到另一个类对象。

在接口概念中,我们根本没有获得任何属性,而是在类中实现接口的未实现方法…

所以inheritance和接口完全相反……

所以最后java支持只有多重inheritance的语法不支持多重inheritance的实现….

inheritance就像借记和界面就像信用……但界面在服务器端编程等其他概念中有其自身的重要性……

通常,多重inheritance会产生比解决的问题更多的问题。 考虑如何解决虚方法调用。 如果一个类没有定义一个方法但是它的父母都这样做怎么办? 哪一个应该执行?

然而,实现多个接口没有这样的问题。 如果两个接口定义了相同的方法并且您实际上尝试实现它们,那么您的代码甚至不会编译(尽管我不确定您是否可以显式实现它们并满足编译器要求)。

由于接口不是实现细节,因此它们只知道对象可以执行的操作。 当在两个基类中具有相同签名的方法找到两种不同的实现时,多重inheritance是困难的。 但是在接口的情况下,接口可以定义具有相同签名的公共方法但是它们不在接口级实现,它们仅由实现这两个接口的对象或类型实现。 这里虽然有两个不同的接口定义了两个具有相同签名的方法,但该对象提供了满足两个接口中的两种方法的通用实现。 因此实现之间没有歧义 ,这两种方法都有共同的实现,因此在接口的情况下你可以有多个inheritance。

具体类的多重inheritance的危险在于存储和虚拟方法查找必须在给定类的两个或多个父级之间进行协调。 特别棘手的是有共享祖先的时候。 但是接口只定义了一个类应该是什么样子,而不是它是如何实现的,而且让一个类看起来像很多不同的东西比使它成为很多不同的东西要容易得多。 两个接口可能需要一个方法int Foo(),一个实现类可以安全地使用这两个接口并实现Foo(),而不会引起基础Foo()覆盖的麻烦等。

另一个原因是构造函数链接很难用多重inheritance来管理。 但接口不指定构造函数,因此问题完全被回避。

多重inheritance有很多其他原因。

 java支持语法多重inheritance.... java不支持多inheritance的实现...有些人说java支持通过接口进行多重inheritance...但是这里解释不正确:inheritance::从一个类对象获取属性到另一个类对象..类A {}类B扩展A {}这里的类A对象获取属性(方法/函数/&数据成员/类变量)为什么java不支持使用类的多重inheritance:Class A {} B类{} C类扩展A,B {} X  - 此语句导致错误,因为A类从A和B两侧获取对象类的对象...默认情况下,每个java类都扩展对象类的Object ...并且对象类的对象是根对象意味着所有类的超类......但是这里的类c有两个超类对象...所以给出错误...意味着java不支持使用类的多重inheritance..是java使用Interfaces :: be支持多重inheritance 这个接口概念的原因我们只有少数人说java支持多重inheritance....但是它错了..这里解释::接口A {}接口B {}接口C实现A,B {}(或)接口A {}接口B {} C类实现A,B {}这里它看起来像多inheritance但是.....inheritance意味着从一个类对象获取属性到另一个类对象..这里在接口概念中我们根本不是得到任何属性而不是我们在类中实现接口的未实现方法...所以inheritance和接口是完全相反的...所以最后java只支持多inheritance的语法不支持多inheritance的实现....inheritance就像借记和界面就像信用......但界面在服务器端编程等其他概念中有其自身的重要性......