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