我想为继承树中的所有类实现默认对象模式。我正在做如下所示。
namespace test
{
public class Record
{
public int ID { get; set; }
}
public class StudentRecord : Record
{
public string StudentID { get; set; }
}
public class DriverRecord : Record
{
public string DLNumber { get; set; }
}
public class client
{
public static void Main()
{
StudentRecord st = StudentRecord.Default;
DriverRecord dr = DriverRecord.Default;
}
}
}
我希望默认属性或方法将所有类级别属性初始化为其默认值,我不想重复每个类的实现。我只想写Record(基础)类。你能就此提出一些建议吗?
答案 0 :(得分:4)
您正在寻找的正是构造函数的用途。构造函数可以调用继承的基础构造函数,因此您只需要在一个位置进行基本初始化。有时基本功能确实能满足您的需求:)
public class Record
{
public int ID { get; set; }
public Record()
{
// ... do general initialisation here ...
}
}
public class StudentRecord : Record
{
public string StudentID { get; set; }
public StudentRecord()
: base() // This calls the inherited Record constructor,
// so it does all the general initialisation
{
// ... do initialisations specific to StudentRecord here ...
}
}
public class client
{
public static void Main()
{
// This calls the constructor for StudentRecord, which
// in turn calls the constructor for Record.
StudentRecord st = new StudentRecord();
}
}
答案 1 :(得分:1)
Record
类只能设置StudentRecord
和DriverRecord
继承的属性。如果要将特定于类的属性设置为其默认值,则必须覆盖该方法(我将创建一个方法)并执行类似这样的操作(对于StudentRecord
):
public void override Initialize()
{
base.Reset();
this.StudentId = 0;
}
HTH
答案 2 :(得分:1)
您的代码示例中没有任何“类级属性”,即静态属性。您拥有的属性(实例属性)已初始化为其默认值 - 0表示整数,null表示引用等。
如果你想定义你自己的默认值 - 也许ID应该默认为-1,直到你保存,并且字符串应该默认为“” - 那么这正是构造函数的用途:
public class Record
{
public Record() { ID = -1; }
public int ID { get; set; }
}
public class StudentRecord : Record
{
public StudentRecord() { StudentID = ""; }
public string StudentID { get; set; }
}
// etc.
如果您想要与其中任何一种不同的东西,您必须解释您正在寻找的东西。
答案 3 :(得分:0)
我认为Null Object Pattern就是您所需要的。