在 C# 中,我有一个类层次结构,其中有几个靠近顶部的抽象基类和相当数量的派生类。这些具体类中的一些具有相同实现的一些公共属性和方法。我觉得这很浪费,因此一种解决方案可能是在另一个抽象基类中实现这种常见行为。
abstract class Control;
abstract class SquareControl: Control
{
public int SquarishProperty;
public void SquarishMethod();
};
class Window: SquareControl;
class Button: SquareControl;
但是,如果层次结构中的其他几个类共享一些其他行为,但也与另一个基类中的一个控件共享一些共同点怎么办?也许有很多共同点。用抽象基类实现对此进行建模将变得不切实际,不是吗?
abstract class FlashableControl: Control
{
public int FlashyProperty;
public void FlashMethod();
};
class StatusBar: FlashableControl; // but it's also a bit square too, hmm...
那么如何在不使用基类的情况下跨类共享此类实现呢?
我想我想将接口的实现委托给另一个类,并让该类代表所需的类实现这些属性和方法,以便对用户而言,StatusBar 和 Window 似乎支持标准接口,但在涵盖它是实现它的其他东西。
我可以可视化实现这种行为的聚合类,但这是否合适,是否有任何陷阱?有哪些替代方案?
谢谢