我有一个需要开发的程序。为了保密,我会使用模糊的术语。我有一个小部件,其中包含由几个不同类共享的成员。我会在两个阶段处理一个小部件。每个阶段都有不同的成员,但他们也分享了一些成员。这是结构图。
Widget()
|- -|
SWidget()PWidget()
| - |
Stage1()Stage2()
Swidget和Pwidget继承自Widget
Swidget包含2个pwidgets
Stage1和stage2继承自Swidget。
我有一个类需要实现stage1或stage2
如果我将变量声明为Swidget,我只能看到常见的东西。我看不出stage1或stage2的具体内容。我该如何解决这个问题?继承适用于所有内容,但它们的区别如何。请指教!
修改用户发布为“回答”:
Stage1和Stage2几乎完全相同。它们与一些成员和一些方法不同。问题是我不能在基类中创建属性来设置特定子类中的属性。 stage1 / stage2类在我知道其特定成员的值之前被实例化。因此,如果我在UI中声明基类的实例,我无法设置它们。基类对子类一无所知。但是,为了能够从UI访问所有属性和方法,我将必须声明其中一个并使用我需要的那个。
答案 0 :(得分:1)
我相信你要找的是这样的:
class Stage
{
//shared members
}
class Stage1: Stage
{
//unique members
}
class Stage2: Stage
{
//unique members
}
class SWidget: Widget
{
Stage currentStage;
}
从我可以收集的信息来看,你遇到了is-a or has-a困境。通过上面的设计,您可以将Stage1或Stage2设置为currentStage。然后根据需要转换属性以访问唯一成员。
现在,这是否是最好的做事方式取决于您的具体需求。
答案 1 :(得分:0)
Stage1和Stage2几乎完全相同。它们与一些成员和一些方法不同。问题是我不能在基类中创建属性来设置特定子类中的属性。 stage1 / stage2类在我知道其特定成员的值之前被实例化。因此,如果我在UI中声明基类的实例,我无法设置它们。基类对子类一无所知。但是,为了能够从UI访问所有属性和方法,我将必须声明其中一个并使用我需要的那个。