部分类或“链式继承”

时间:2010-04-30 08:29:49

标签: c# oop

根据我的理解,专业开发人员对部分课程有点不满意,但我遇到了一些问题;

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

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

现在我的问题;要合并这两个类,我是否应该从快速编辑继承拼写检查RichTextBox,然后继承RichTextBox?或者我应该让这两个类成为单个类的部分,从而使它们更加“平等”可以这么说呢?

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

谢谢!

2 个答案:

答案 0 :(得分:2)

我不完全确定我是否理解你要做的事情,但在我看来,你只是在寻找Decorator design pattern。如果这不足以解决你的问题并且你真的在考虑从特征组成类,请看Policy based design,虽然我不太确定在C#中可以实现多少。 还有一本书 - Modern C++ design是基于策略的设计的支持者,但它讨论了所谓的部分类与(多重)继承的权衡。链式继承的问题在于决定顺序,因为该顺序会创建强依赖关系,如果将SpellChecking添加到RichTextEdit,一旦您想要使用SpellChecking,就会遇到问题。 SearchBox,可能是SimpleEdit,但为用户提供拼写检查会很好...我希望这至少有一点帮助。

答案 1 :(得分:1)

这里有多重继承的论据!

您可以为功能定义接口(IFastEditTextBox和ISpellCheckingTextBox)并在每个接口中实现方法。这将是更多的OO,但有可能“复制并粘贴”代码。

在这里使用部分类没有任何问题。他们唯一的根本问题是他们可能会鼓励那些已经倾向于采用程序方法将一切编码到一个类中的开发人员。