C# c中的接口、继承和windows窗体#

C# c中的接口、继承和windows窗体#,c#,inheritance,interface,software-design,C#,Inheritance,Interface,Software Design,我有一个设计问题。在编写一个应用程序时,如果有几个组件共享某些属性,而其他组件在GUI(windows窗体)和后端方面又有所不同,那么从理论上讲,我们将如何处理这个问题 例如,我有一个应用程序,其中我有4种不同类型的产品。用于输入产品详细信息的表单都共享3个不同的字段。到目前为止,easy-有一个基类,然后从这个基类派生出4种形式。然而,比如说,两种产品有着相同的行为,这两种产品都是一样的。当然,我可以有一个定义方法的接口,然后让这两个产品条目表单实现这个接口,但既然接口没有提供默认实现,那么这

我有一个设计问题。在编写一个应用程序时,如果有几个组件共享某些属性,而其他组件在GUI(windows窗体)和后端方面又有所不同,那么从理论上讲,我们将如何处理这个问题

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


我当然可以把这个方法放在基类中,并从中派生出两种形式。如果我的表单共享多个公共元素,而不共享其他元素,那么在不必扯掉头发的情况下,用什么最明智、最合乎逻辑的方式来表示这一点呢?

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

如果没有任何特定的布局,很难判断。通常,另一种更灵活的重用形式是组合而不是继承。事实上,控件层次结构显示了组合的强度。也许您可以将UI的各个部分分离到自定义控件中,这些控件是根据您所追求的特定产品布局组装而成的

为什么不让这两个不相关的类直接从基类派生,然后创建一个具有公共功能的新类,并从基类派生,并拥有其余两个类从那个新类继承

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

这不意味着重复吗?这不是复制和粘贴;这意味着两种形式都包括MyUserControlWithAbunchOfCommonFunctionary类的一个实例,就像在data成员上一样。