Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两个实现相同但基类不同的类的C#设计模式_C#_Design Patterns_Dry - Fatal编程技术网

两个实现相同但基类不同的类的C#设计模式

两个实现相同但基类不同的类的C#设计模式,c#,design-patterns,dry,C#,Design Patterns,Dry,以两个基类A和B为例,这两个基类相似,但最好是不同的。每个类都有一个子类(a'和B'),该子类将相同的功能和成员添加到各自的类中。是否有一种设计模式允许我不必在a'和B'中重复代码 我已经研究了桥接器和装饰器,但我看不出它们是如何工作的 谢谢, Rob您是否可以使用组合并将共享代码重构到另一个类C?将相同的功能和成员添加到各自的类中。听起来很接近一个接口,尽管它仍然有单独的实现。可能与提供程序模式类似 以两个基类A和B为例 类似,但最好是 不同的每个都有一个子类(a’和 B'),它们添加了相同的

以两个基类A和B为例,这两个基类相似,但最好是不同的。每个类都有一个子类(a'和B'),该子类将相同的功能和成员添加到各自的类中。是否有一种设计模式允许我不必在a'和B'中重复代码

我已经研究了
桥接器
装饰器
,但我看不出它们是如何工作的

谢谢,
Rob

您是否可以使用组合并将共享代码重构到另一个类C?

将相同的功能和成员添加到各自的类中
。听起来很接近一个接口,尽管它仍然有单独的实现。可能与
提供程序
模式类似

以两个基类A和B为例 类似,但最好是 不同的每个都有一个子类(a’和 B'),它们添加了相同的功能 以及各自的 上课

这是一个有点奇怪的地方开始。如果是我的话,我会改变设计的这一部分

假设这是不合理的,不管出于什么原因,我认为Decorator是避免代码重复的最好方法

您需要创建子类A'&B'。并且您必须声明在每个文件中添加的方法和属性。这些成员应该委托给可以实现公共功能的另一个类的成员。该类的实例将同时包含在A'和B'中


只有当这些普通成员的实施意义重大时,这才真正节省了重复工作。

战略模式。在第三个类中创建公共代码,并在a'和B'中保存一个实例。

mixin的概念接近于您想要的。然而,C#并不支持这个概念。您可以使用接口和扩展方法来模拟mixin的概念,但它看起来并不漂亮


查看此问题以了解更多信息:

是否将“代码生成”视为设计模式?我可能会出于其他原因使用接口,但正如您所说,它不会减少代码重复。