C# 部分类或;链式继承”;

C# 部分类或;链式继承”;,c#,oop,C#,Oop,据我所知,专业开发人员对部分类有点反感,但我遇到了一些问题 我已经实现了RichTextBox控件,它使用user32.dll调用来更快地编辑大文本。这会产生相当多的代码。然后我向控件添加了拼写检查功能,这也是在继承RichTextBox控件的另一个类中实现的。这也构成了一些代码 这两个功能是相当独立的,但我希望它们被合并,这样我就可以在我的表单上删除一个控件,该控件具有快速编辑功能和内置拼写检查功能。 我觉得简单地将代码从一个类添加到另一个类会导致代码文件太大,特别是因为有两个非常不同的功能区

据我所知,专业开发人员对部分类有点反感,但我遇到了一些问题

我已经实现了RichTextBox控件,它使用user32.dll调用来更快地编辑大文本。这会产生相当多的代码。然后我向控件添加了拼写检查功能,这也是在继承RichTextBox控件的另一个类中实现的。这也构成了一些代码

这两个功能是相当独立的,但我希望它们被合并,这样我就可以在我的表单上删除一个控件,该控件具有快速编辑功能和内置拼写检查功能。 我觉得简单地将代码从一个类添加到另一个类会导致代码文件太大,特别是因为有两个非常不同的功能区域,所以我似乎需要另一种方法

现在回答我的问题;要合并这两个类,我应该让拼写检查RichTextBox从快速编辑类继承,而快速编辑类又继承RichTextBox吗?或者我应该把这两个类作为一个类的一部分,这样可以说它们更“平等”

这对我来说更像是一个OO原则和练习的问题,而不是我试图重新发明轮子,我知道有很多好的文本编辑控件。但这只是我的一个爱好,我只想知道专业人士如何管理这种解决方案


谢谢

这里有一个多重继承的论点

您可以为功能定义一个接口(IFastEditTextBox和ISpellCheckingTextBox),并在每个接口中实现方法。这可能更像是面向对象的,但也有可能出现“复制和粘贴”代码


在这里使用分部类没有任何问题。它们唯一的基本问题是,它们可能会鼓励已经倾向于过程方法的开发人员将所有内容编码到一个类中。

我不完全确定是否理解您的意图,但在我看来,您只是在寻找解决方案。如果这还不能解决您的问题,并且您真的在考虑从traits组成类,那么请看一下,尽管我不太确定有多少可以在C#中实现。
还有那本书——它是基于策略的设计的支持者,但是它讨论了部分类与(多重)继承之间的权衡。链式继承的问题在于决定顺序,因为该顺序具有很强的依赖性,如果您将拼写检查添加到RichTextEdit,则在您希望对搜索框(例如SearchBox)使用拼写检查时会遇到问题,这可能是SimpleEdit,但为用户提供拼写检查会很好。。。我希望这至少有一点帮助。

我对接口的使用(和理解)非常有限,但是,这种方法基本上不会迫使我在SpellCheckingTextBox中重复FastEditTextBox代码,反之亦然吗?我认为您应该考虑常见的调用,并在SpellChecker类和fast edit类上实现一个IExtensibleRichTextBox。正如Gabriel所建议的,这将允许您实现decorator模式。然后,您可以根据需要定义fast、拼写检查或fast拼写检查。有关装饰模式的详细概述,请查看O'reilly书籍中的免费章节“头先设计模式: