c#中的接口,继承和窗体形式

时间:2009-05-21 21:31:13

标签: c# inheritance interface software-design

我有一个设计问题。在编写一个应用程序时,有多个组件共享某些属性,并且在GUI(窗体形式)和后端方面都有所不同,理论上如何处理这个?

例如,我有一个应用程序,我有4种不同类型的产品。输入产品详细信息的表单共享3个不同的字段。到目前为止,很容易 - 有一个基类,然后从这个基类派生出4个表单。但是,比方说,2个产品共享某种行为,这两种行为都是相同的。当然,我可以有一个定义方法的接口,然后让这两个产品输入表单实现这个接口,但由于接口没有提供默认实现,这样做不是浪费吗?因为我必须在每个类中提供一个实现,如果它完全相同,那就是代码重复。

我当然可以将此方法放在基类中,并从中派生出2个表单。如果我的表单共享多个共同元素而不共享其他元素,那么在不必撕掉我的头发的情况下代表它的最安全,最合乎逻辑的方法是什么?

3 个答案:

答案 0 :(得分:2)

为什么不将2个不相关的类直接从您的基类派生,然后创建一个具有通用功能的新类,并从基类派生并使剩下的两个类继承自该新类?

BaseClass
CommonClass : BaseClass
ClassA : BaseClass
ClassB : BaseClass
ClassC : CommonClass
ClassD : CommonClass

答案 1 :(得分:0)

将共同行为分为两个类的一种方法是将两个类包含该行为作为成员,而不是继承该行为:对于表单,这可能是意味着定义'用户控件'(即可重用的常用控件集合)。

答案 2 :(得分:0)

没有任何特定的布局很难分辨。通常,另一种通常更灵活的重用形式是组合而不是继承。实际上,控制层次结构显示了组合的强大程度。也许您可以将UI的一部分分离为基于您所追求的特定产品布局组装的自定义控件