【发布时间】:2016-09-27 13:50:39
【问题描述】:
我有一个设计问题。假设我有一个基类和许多派生类。
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 并将其作为派生类构造函数的最后一行调用。但这违反了我的基本原则(每个派生类都应该在初始化后立即记录)。我想通过设计制作这个mandotory。
有什么方法可以处理吗?
【问题讨论】:
-
不可能。做到这一点的唯一方法是通过工厂来实现。对我来说,Record 功能不合适,看起来你的班级做得比它应该做的更多。
-
如果您将 Record 作为接口/抽象并在每个 Derive 类中实现它会怎样? (你想如何使用记录中的特殊道具?)
标签: c# oop object-oriented-analysis