有多重遗传的优点和缺点是什么?

问题描述:

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

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

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

+0

http://stackoverflow.com/questions/225929/what-is-the-exact-problem-with-multiple-inheritance - 看起来像一个类似的问题 – 2009-04-20 00:03:47

这里是多重继承的陷阱商量好了:

Why should I avoid multiple inheritance in C++?

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

主要意思是如果两个类有一个名称相同的方法,新的子类不知道要调用哪一个。

在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. 
} 

我会给这里亲基于C++的报告,作家,我一直converting to REALbasic(其中有接口,但只有单继承)。

多重继承可以更容易地从小的mixin基类中编写实现功能并具有记忆状态属性的类。当正确完成时,您可以获得大量小代码的重用,而无需复制和粘贴类似的代码来实现接口。

幸运的是,有REALbasic的延伸方法它们是像扩展方法最近添加到C#C#3.0中。这些有助于解决这个问题,特别是它们可以应用于数组。由于折叠了先前多重继承的类,我仍然得到了一些类层次结构更深的结果。

当你从什么继承你声称你的类是(基地)的不同之处在于,你可能会略有不同的方式实现的东西或添加东西给它,它实际上是非常罕见的,你类是每路输入 2件事一次。通常它只对2个或更多的东西具有共同的行为,而更好的描述方法通常是让你的类实现多个接口。 (或可能的封装,取决于你的情况)

这是一个帮助我不拍摄自己在脚下的怪癖,很像在Java中。

尽管从多个来源扩展字段和方法是很好的(想象一下从MP3播放器,相机,卫星导航和谦虚的老派手机继承而来的现代手机),冲突无法通过单独编译器。

它只是工具箱中的另一个工具。有时候,它恰恰是正确的工具。如果是这样,必须找到解决方法,因为语言实际上禁止它是一种痛苦,并导致很好的机会来搞砸它。

优点和缺点只能在具体案例中找到。我想这实际上适合一个问题是非常罕见的,但谁是语言设计师来决定我如何解决特定问题?

+0

那么在C#中它不是一个工具箱! :) – 2009-04-20 03:21:52