拥有多重继承的优点和缺点是什么?

时间:2009-04-19 23:55:04

标签: multiple-inheritance

拥有多重继承的优点和缺点是什么?

为什么我们在C#中没有多重继承?

更新 好的,所以它当前被避免了,因为冲突的问题解决了哪个父方法被调用等。当然这是程序员要解决的问题。或者也许这可以像SQL一样解决,因为存在冲突需要更多信息,即ID可能需要成为Sales.ID来解决查询中的冲突。

6 个答案:

答案 0 :(得分:6)

以下是对多重继承陷阱的一个很好的讨论:

Why should I avoid multiple inheritance in C++?

以下是C#团队讨论他们为什么决定不允许多重继承的讨论:

答案 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播放器,相机,卫星导航和简陋的旧学校移动电话),编译器无法解决冲突单独