C# dotnet中不支持多重继承。但是多接口支持吗?

C# dotnet中不支持多重继承。但是多接口支持吗?,c#,.net,inheritance,multiple-inheritance,C#,.net,Inheritance,Multiple Inheritance,可能重复: dotnet中不支持多重继承。但是多接口支持。为什么会有这种行为。 有什么具体原因吗 一般来说,多重继承产生的问题比它解决的问题多。考虑必须如何解决虚拟方法调用。如果一个类没有定义一个方法,但它的两个父类都定义了该方法怎么办?应该执行哪一个 然而,实现多个接口并没有这样的问题。如果两个接口定义了相同的方法,而您实际尝试实现它们,那么您的代码甚至无法编译(尽管我不确定您是否可以显式实现它们并满足编译器要求).具体类的多重继承的危险在于,必须在给定类的两个或多个父类之间协调存储和虚拟方

可能重复:

dotnet中不支持多重继承。但是多接口支持。为什么会有这种行为。
有什么具体原因吗

一般来说,多重继承产生的问题比它解决的问题多。考虑必须如何解决虚拟方法调用。如果一个类没有定义一个方法,但它的两个父类都定义了该方法怎么办?应该执行哪一个


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

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

另一个原因是构造函数链接很难通过多重继承进行管理。但接口并没有指定构造函数,所以这个问题完全被回避了


多重继承不好的原因当然还有很多。

您可以使用接口模拟多重继承。如果允许类的多重继承,则会导致。
由于不支持多重继承的原因,我建议您阅读

不同的语言实际上有 不同的期望如何 作品例如,冲突是如何发生的 已解决和是否存在重复碱基 合并或冗余。在我们可以之前 在CLR中实现MI,我们必须 所有语言的概览,图 找出共同的概念,并作出决定 如何用语言表达它们 语言中立的态度。我们也会 必须决定MI是否属于 CLS以及这将意味着什么 不需要这个概念的语言 (例如,大概是VB.NET)。属于 当然,这是我们的业务 作为公共语言运行库,但我们 我还没来得及为米做这件事 然而

MI真正存在的地方的数量 它实际上相当小。 在许多情况下,多接口 继承可以完成任务 相反在其他情况下,您可能会 能够使用封装和 代表团。如果我们要添加一个 稍微不同的构造,比如 mixins,那真的会更多吗 强大

多重实现继承 将大量复杂性注入到 实施这种复杂性 影响铸造、布局、调度, 字段访问、序列化、标识 比较,可验证性, 反射、泛型和可能 很多其他地方

因为接口不支持 实施细节,他们只知道 对象可以执行的操作。 当 有两种不同的方法 可以为 在两个 基类。但在接口的情况下 这两个接口都可以定义一个公共接口 方法具有相同的签名,但它们 未在接口上实现 级别,它们仅由 实现两者的对象或类型 接口。这里虽然有 两个不同的接口定义了两个 具有相同签名的方法 对象提供公共 满足以下两个条件的实现 两个接口中的方法。So 两者之间没有歧义 实现,两种方法都具有 通用实现,因此您可以 在发生以下情况时具有多重继承: 接口

java支持语法多重继承…java不支持多重继承的实现。。。 有人说java支持通过接口进行多重继承……但这里的解释不正确: 遗产: 正在将属性从一个类对象获取到另一个类对象。。 A类{} 类B扩展了{} 这里是类A的对象,获取属性(方法/函数/&数据成员/类变量) java不支持使用类的多重继承的原因: 类A{}类B{}类C扩展了A,B{}X——此语句导致错误,因为类A从A和B两侧获取对象类的对象。。。 每个java类默认扩展对象类的对象…而对象类的对象是根对象,表示所有类的超类。。。 但是这里c类有两个对象的超类…所以给出错误…意味着java不支持使用类的多重继承。。 is java支持使用接口进行多重继承:: 由于这个接口概念,我们中只有少数人说java支持多重继承……但这是错误的。。 解释如下: 接口A{} 接口B{} 接口C实现A,B{} (或)接口A{} 接口B{} 类C实现A,B{} 这里它看起来像多重继承,但是。。。。。 继承意味着将属性从一个类对象获取到另一个类对象。。 在接口概念中,我们根本没有得到任何属性,而是在类中实现接口的未实现方法。。。 所以继承和接口是完全相反的。。。 最后,java只支持多重继承的语法,不支持多重继承的实现。。。。 继承就像借方,接口就像贷方……但接口在其他概念中有它自己的重要性,比如 java supports syntactical multiple inheritance....java does not supports implementation of multiple inheritance... some people says java supports multiple inheritance through interfaces ...but its not correct here the explanation: inheritance :: getting the properties from one class object to another class object.. Class A{} Class B extends A {} here object of class A getting the properties(methods/functions/ & data members/class variables) why java does not supports multiple inheritance using classes: Class A{} Class B{} Class C extends A,B{} X--this statement causes error because Class A getting object of object class from both sides A and B... every java class by default extending Object of object class...and Object of object class is the root object means super class for all classes... but here Class c having two super classes of object...so giving error...means java does not support multiple inheritance by using classes.. is java supports multiple inheritance using Interfaces:: because of this interface concept only few of us saying that java supports multiple inheritance....but its wrong.. here the explanation:: interface A{} interface B{} interface C implements A , B{} (or) interface A{} interface B{} Class C implements A , B{} here its look like multiple inheritance but ..... inheritance means getting the properties from one class object to another class object.. here in interface concept we are not at all getting any properties rather we are implementing the unimplemented methods of interface in class... so inheritance and intefaces are quite opposite... so finally java supports only syntax of multiple inheritance does not supports implementation of multiple inheritance.... inheritance is like debit and interface is like credit....but interface has its own importance in other concepts like server side programming...