C# 从多个类继承有什么用?

C# 从多个类继承有什么用?,c#,oop,C#,Oop,我在论坛上看到了一些评论,人们似乎希望能够继承c#中的多个类。你为什么需要这个?我想不出有什么用,但是既然有人想要,就必须有一些。 < P>人们可能想这样做,因为他们习惯于用C++来做。在C#中是不允许的。依我看,从应用程序可维护性的角度来看,这是一件好事。通常情况下,使用多个接口可以完成相同的任务。n 如果你有一个基类,它的抽象方法设计得很好,并且知道继承对象只需要在该类中定义的方法,那么你就有一个不需要MI的有效设计模式。< P>多继承有时被用在C++(和其他语言)中。允许类从多个基类继承属

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

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


如果你有一个基类,它的抽象方法设计得很好,并且知道继承对象只需要在该类中定义的方法,那么你就有一个不需要MI的有效设计模式。

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

下面是一篇关于埃菲尔铁塔多重继承的好文章:


下面是一个ASP.NET WebForms示例:

我有一个基类,一个web控件,假设它是一个简单的
TextBox

然后我从
TextBox
继承来提供格式-
RichTextBox

然后我想要一个
文本框
,它可以拼写检查-
拼写检查文本框

如果我需要一个
拼写检查RichTextBox
?我必须再次实现拼写检查或富文本逻辑,并从其中一个继承

实际上,您可以将它们定义为接口:
ISpellCheckingTextBox
IRichTextBox
,并在
拼写检查Richtextbox
中实现它们。您还可以为
TextBox
编写扩展方法来完成同样的任务


多重继承从根本上说是有缺陷的,因为它认为继承的类是平等的。如果两个基类都有一个
ID
字段怎么办?

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

我个人认为,如果没有冲突,或者有冲突处理机制,但不能有多重继承,这是一个耻辱。

大多数情况下,如果需要多继承,那么你的设计可能有点不正确:)在C++的日子里,有时需要它,因为缺少接口。“不需要”是过分的:是的,接口完成了MI提供的大部分功能,但mixin提供了一个强大的习语来组合正交行为策略。这种能力是否值得“死亡钻石”的麻烦“另一个问题完全是,很少有人在C++中使用MI。事实上,人们想使用MI是因为他们不知道如何正确使用。