我有一个名为 WidgetBase 的抽象基类,如下所示:
public abstract class WidgetBase : Control, INamingContainer
{
// This class declares abstract and virtual properties and methods but doesn't override anything
}
我有另一个名为 ScrollerBase 的抽象基类,它看起来像这样:
public abstract class ScrollerBase : Control
{
// This class has one abstract property and overrides OnInit and OnLoad
}
我需要创建一个继承自这两个类的类。这两个类都不能转换为接口。我能想到的最简单的解决方案是创建一个额外的 WidgetBase 类,如下所示:
public abstract class ScrollingWidgetBase : ScrollerBase, INamingContainer
{
// Lots of duplicated code from WidgetBase
}
如果我能做这样的事情会很好:
public abstract class ScrollingWidgetBase : WidgetBase<ScrollerBase> { /* Empty */ }
public abstract class WidgetBase : WidgetBase<Control> { /* Empty */ }
public abstract class WidgetBase<T> : T, INamingContainer { /* Code goes here */ }
然而这是不可能的。我能想到的唯一半优雅的解决方案是这样的:
public interface IScroller { /* Overridable members go here */ }
public class WidgetBase : Control, INamingContainer
{
protected override void OnInit(EventArgs e)
{
if (this is IScroller)
{
// Do scroller logic here
}
}
protected override void OnLoad(EventArgs e)
{
if (this is IScroller)
{
// Do scroller logic here
}
}
}
public class Test : WidgetBase, IScroller { }
但是,如果创建更多类,这将变得非常混乱。肯定有某种设计模式可以解决这个问题吗?任何帮助将不胜感激。
谢谢,
乔