从多个类继承有什么用?

时间:2010-06-01 11:25:01

标签: c# oop

我在论坛上看到了一些评论,似乎人们希望能够从c#中的多个类继承。你为什么要这个?我想不出有什么用处,但是因为有人想要它,所以必须有一些。

4 个答案:

答案 0 :(得分:3)

嗯,这是一个ASP.NET WebForms示例:

我有一个基类,一个网络控件,让我们说这是一个简单的TextBox

然后我继承TextBox以提供格式化 - RichTextBox

然后,我想要一个可以拼写检查的TextBox - SpellCheckingTextBox

如果我需要SpellCheckingRichTextBox怎么办?我必须再次实现拼写检查或富文本逻辑,并从一个或另一个继承。

实际上,您可以将它们定义为接口:ISpellCheckingTextBoxIRichTextBox,并在SpellCheckingRichTextBox中实现它们。您还可以为TextBox编写扩展方法来完成同样的事情。

多重继承从根本上是有缺陷的,因为它将继承的类视为相等。如果两个基类都有ID字段会怎么样?

答案 1 :(得分:1)

人们可能想要这样做,因为他们习惯于在C ++中这样做。它不允许在C#中。从应用程序可维护性的角度来看,IMO是一件好事。通常,使用多个接口将完成相同的任务.n

如果您的基类具有正确设计的抽象方法,并且知道继承对象只需要该类中定义的方法,那么您就拥有了不需要MI的有效设计模式。

答案 2 :(得分:1)

有时在C ++(和其他语言)中使用多重继承,以允许类从多个基类继承属性和代码。当你有接口时,比如在C#和Java中,实际上不需要多重继承,所以它没有用这些语言实现。

这是一篇关于艾菲尔中多重继承的好文章:

http://archive.eiffel.com/doc/manuals/technology/bmarticles/joop/multiple.html

答案 3 :(得分:0)

在C#中想要它的一个合法案例是创建派生对象MarshalByRef。例如,假设我想执行以下操作:

public class FooCorpClass
{
  // This class is defined in a 3rd party library and thus can't be changed
}

public class MyFoo : FooCorpClass, MarshalByRef
{
  // I can't do this because MarshalByRef isnt' an interface
}

我个人认为,如果没有碰撞,或者有碰撞处理机制,你不能拥有多重继承,这是一种耻辱,但它们就是休息。