【发布时间】:2013-08-12 01:35:35
【问题描述】:
假设您有一个支持将 GUI 组件相互嵌套的 GUI 框架。让我们将任何可以包含其他 GUI 组件的 GUI 组件的基类称为 Container。
子类化 Container soley 是否可以提供默认配置,或者子类化是否应该始终提供添加/覆盖/实现的行为?例如,假设我想制作一个 ButtonBar 容器,它填充 100% 的屏幕宽度,高度为 50 像素,并水平布置其组件。要配置这样的容器,我可以执行以下两个示例之一:
Container container = new Container();
container.PercentWidth = 100;
container.Height = 50;
container.Layout = Layout.Horizontal;
// use container
或者,(这是我的问题),这样做可以吗:
public class ButtonBar : Container
{
public ButtonBar()
{
PercentWidth = 100;
Height = 50;
Layout = Layout.Horizontal;
}
}
ButtonBar buttonBar = new ButtonBar();
// use buttonBar
ButtonBar 对容器没有额外的功能,并且不会覆盖任何容器方法。它只是用来简化将 Container 配置为 ButtonBar。
编辑
我的结论是最好使用返回Container的工厂,例如widgetFactory.CreateButtonBar();这样,您最终会使用抽象类型(Container),并将类型的“设置”封装在工厂中,这就是工厂所做的。
public class WidgetFactory
{
public Container CreateButtonBar()
{
Container container = new Container();
container.PercentWidth = 100;
container.Height = 50;
container.Layout = Layout.Horizontal;
return container;
}
}
【问题讨论】:
-
如果一致性是你所追求的,那么它可能没问题......
-
这是 WPF 中相对常见的做法,例如,应用全局样式(在这种情况下,您的子类中甚至没有任何代码,它只需要存在即可。)跨度>
标签: c# oop derived-class subclassing