我有一個設計問題。可以說我有一個基類和許多派生類。在派生類構造函數後運行一些東西
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類中實現,該怎麼辦? (你如何使用記錄中的特殊道具?) –