我在使用正确的继承链时遇到了问题而没有放弃DRY原则的优点。
鉴于以下结构:
现在,我需要有两个具有相同功能的新类。但是一个是A型,而另一个是B型。(这不能改变!)
这两个类都应该有一个方法SetSize()
。
所以最后会有C类:A和D:B,两者都有相同的SetSize方法。
问题:如何创建一个基类中间层,让SetSize()
- 方法只声明/实现一次(DRY)?
我猜想使用接口或一些静态辅助类来实现SetSize()
的逻辑?
是否有任何模式或最佳实践来实现此行为?
答案 0 :(得分:2)
你不能通过C#中的继承来做到这一点,因为它不支持多重继承;语言为这种情况提供的工具是接口:
public interface
{
void SetSize(Size size);
}
public SizableA: A, ISizable { ... }
public SizableB: B, ISizable { ... }
还要记住,当继承链中的类型具有是关系时,应该使用继承(Cat
是Animal
,{{1当一个完全不相关的类具有非常特定的共同行为时,接口是首选;}}是B
等等。 A
,IEquatable
,IComparable
等。您的IDisposable
行为似乎更适合这最后一个类别,因为它似乎不是{特定于{的功能{1}}或SetSize
。
现在,如果A
和B
都应该共享SizableA
的相同实现,那么最好的解决方案是使用合成或简单地委派功能:
SizableB
答案 1 :(得分:0)
创建一个抽象类,包括SetSize()方法和A和B类的公共属性。然后A和B类继承抽象类。