我有一个设计问题。可以说我有一个基类和许多派生类。在派生类构造函数后运行一些东西
class MyBase
{
MyBase()
{
Record();
}
void Record()
{
/// this line is able to handle every object
Recorder.Process(this);
}
}
class DerivedA : MyBase
{
public int SpecialPropertyOfA { get; set; }
DerivedA(int specialPropertyOfA)
{
SpecialPropertyOfA = specialPropertyOfA;
}
}
class DerivedB : MyBase
{
public string SpecialPropertyOfB { get; set; }
DerivedA(string specialPropertyOfB)
{
SpecialPropertyOfB = specialPropertyOfB;
}
}
正如你可能推论的那样,我想记录派生类的所有属性设置。但是上面的例子不能记录派生类的特殊属性,因为它们在Record
方法调用时没有设置。
解决此问题的一种方法是制作Record
方法protected
并将其称为派生类构造函数的最后一行。但这违反了我的基本原则(每个派生类都应该在初始化后立即记录下来)。我想通过设计来制作这款腕表。
任何方式来处理?
不可能的。唯一的方法就是通过Factory来做到这一点。对我来说,录音功能不合适,看起来你的班级做得比应该多。 – RvdK
如果您将Record作为接口/抽象并在每个Derive类中实现,该怎么办? (你如何使用记录中的特殊道具?) –