拥有多重继承的优点和缺点是什么?
为什么我们在C#中没有多重继承?
更新 好的,所以它当前被避免了,因为冲突的问题解决了哪个父方法被调用等。当然这是程序员要解决的问题。或者也许这可以像SQL一样解决,因为存在冲突需要更多信息,即ID可能需要成为Sales.ID来解决查询中的冲突。
答案 0 :(得分:6)
答案 1 :(得分:3)
我将基于C ++报表编写者给我一个专家我一直converting to REALbasic(它有接口但只有单继承)。
多重继承使得从实现功能并具有记忆状态属性的小型mixin基类组成类更容易。如果做得好,您可以大量重用小代码,而无需复制和粘贴类似的代码来实现接口。
幸运的是,REALbasic有 extends 方法,就像最近在C#3.0中添加到C#的扩展方法一样。这些有助于解决问题,特别是因为它们可以应用于数组。由于折叠了之前多次继承的类,我仍然最终得到了一些更深层次的类层次结构。
答案 2 :(得分:3)
这只是工具箱中的另一个工具。有时,它确实是正确的工具。如果是这样,必须找到一种解决方法,因为语言实际上禁止它是一种痛苦,并导致很好的机会搞砸它。
只有具体案例才能找到利弊。我想实际适合一个问题是非常罕见的,但是谁是语言设计师来决定我如何解决一个特定的问题呢?
答案 3 :(得分:1)
主要的一点是,如果两个类的方法具有相同的名称,则新的子类不知道要调用哪个。
在C#中,您可以通过在子项中包含每个父对象的实例来执行多重继承的形式。
class MyClass
{
private class1 : Class1;
private class2: Class2;
public MyClass
{
class1 = new Class1;
class2 = new Class2;
}
// Then, expose whatever functionality you need to from there.
}
答案 4 :(得分:0)
当你从某些东西继承你断言你的类是各种方式的那种(基础)类型,除了你可能实现稍微不同的东西或添加某些东西,它实际上非常罕见你的班级一次 2件事。通常它只具有2个或更多内容的行为,更好的描述方法通常是让您的类实现多个接口。 (或可能封装,取决于您的具体情况)
答案 5 :(得分:0)
这就是那些帮助我从不傻逼自己的怪癖之一,就像在Java中一样。
虽然很好地从多个来源扩展字段和方法(想象一下现代移动电话,它继承自MP3播放器,相机,卫星导航和简陋的旧学校移动电话),编译器无法解决冲突单独