C#是否支持多重继承?
答案 0 :(得分:9)
C#不支持多重继承。它确实支持接口的多个实现(因此您的类可以使用尽可能多的接口,只有一个基类')
答案 1 :(得分:3)
简而言之,不支持多重继承。
这不是问题,因为继承应始终转换为“is-a”关系。对象通常只有一种。
另一方面,转换为“行为类似”关系的接口可以多次实现。
这不是限制,而是避免许多奇怪问题的优势,例如Diamond Problem。
答案 2 :(得分:2)
没有。抱歉。它目前不支持多重继承。
答案 3 :(得分:2)
它不支持多重继承,希望它永远不会。摆脱这个错误源是远离C ++编程模型的主要步骤之一。
托马斯
答案 4 :(得分:1)
当您使用真实世界的示例进行概念化时,多重继承始终是一个令人毛骨悚然的概念。多重继承意味着多个父亲。对象在C#中是安全的,它们只属于一个父亲:)
在另一个威胁上,他们讨论了一些设计问题。您必须对此感兴趣:What is the exact problem with multiple inheritance?
答案 5 :(得分:1)
C#不支持多重继承。
但是如果你想从两个来源“继承”行为,为什么不使用组合:
组合物
和
依赖注入
有一个基本但重要的OOP原则可以说:“赞成组合而不是继承”。
你可以创建一个这样的类:
public class MySuperClass
{
private IDependencyClass1 mDependency1;
private IDependencyClass2 mDependency2;
public MySuperClass(IDependencyClass1 dep1, IDependencyClass2 dep2)
{
mDependency1 = dep1;
mDependency2 = dep2;
}
private void MySuperMethodThatDoesSomethingComplex()
{
string s = mDependency1.GetMessage();
mDependency2.PrintMessage(s);
}
}
正如您所见,通过构造函数注入了dependecies(接口的实际实现)。您的类不知道每个类是如何实现的,但它知道如何使用它们。因此,这里涉及的类之间存在松散的耦合,但具有相同的使用能力。
今天的趋势表明继承有点“过时”。
答案 6 :(得分:0)
我的2美分:正如已经说过的,C#不支持多重继承,也支持其他OO语言,如Java。主要原因是多继承带来的问题,例如使用super()构造函数,例如;很难评估所有可能的歧义 - super()来自哪个类?由于解决模糊性的方法,还存在性能问题。使用C ++发现的大多数问题都支持多继承,并且考虑到这一点,开发人员
正如Svisstack所说,使用接口。大多数时候是解决问题的最佳方法。根据经验,即使在C ++中,我也使用没有任何属性的抽象类来模拟接口。
PS:在我写这个答案的时候,jdehaan提出了我更详细的说法。答案 7 :(得分:0)
虽然它不支持多重继承,但您可以通过接口和摘要推送多个实现。一个例子是创建车辆并基于车辆类型实现不同的界面。下面是一个非常伪的飞机和出租车的例子,它既实现了车辆类别,又实现了特定于车辆类型的界面,并包含特定于其行为的方法。
我输入方法调用的方式称为显式接口实现,并处理一个事件,其中车辆和其他接口都包含相同的方法。
interface IPlane
{
void CheckLanding();
void LandingGear();
void Turn();
}
interface IVehicle
{
void Gas();
void Brake();
void Turn();
}
interface ITaxi
{
void StartMeter();
void StopMeter();
)
public class Taxi: IVehicle, ITaxi
{
void ITaxi.StartMeter()
void IVehicle.Gas
void IVehicle.Brake
void ITaxi.StopMeter()
{
public class AirPlane: IVehicle, IPlane
{
void IVehicle.Gas()
void IVehicle.Turn()
void IPlane.LandingGear()
void IPlane.Turn()
void IPlane.CheckLanding()
void IPlane.Turn()
void IPlane.LandingGear()
void IVehicle.Brake()
void IVehicle.Turn()
}