默认对象实现

时间:2011-04-04 11:47:14

标签: c# object default

我想为继承树中的所有类实现默认对象模式。我正在做如下所示。

 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(基础)类。你能就此提出一些建议吗?

4 个答案:

答案 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类只能设置StudentRecordDriverRecord继承的属性。如果要将特定于类的属性设置为其默认值,则必须覆盖该方法(我将创建一个方法)并执行类似这样的操作(对于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就是您所需要的。