Реализация объекта по умолчанию - PullRequest
1 голос
/ 04 апреля 2011

Я хочу реализовать шаблон объекта по умолчанию для всех моих классов в дереве наследования. Я делаю, как показано ниже.

 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;
        }
    }
}

Я хочу, чтобы свойство или метод по умолчанию инициализировали все свойства уровня класса по умолчанию, и я не хочу повторять реализацию для каждого класса. Я просто хочу написать о записи (базовый) класс. Можете ли вы дать некоторые предложения по этому вопросу?

Ответы [ 4 ]

4 голосов
/ 04 апреля 2011

То, что вы ищете, это именно то, для чего нужны конструкторы . Конструктор может вызвать унаследованный базовый конструктор, поэтому вам нужно выполнить базовую инициализацию только в одном месте. Иногда базовый функционал действительно делает то, что вам нужно:)

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 голос
/ 04 апреля 2011

В вашем примере кода нет никаких «свойств уровня класса», то есть статических свойств.Свойства, которые у вас есть (свойства экземпляра), уже установлены в значения по умолчанию - 0 для целых чисел, ноль для ссылок и т. Д.

Если вы хотите определить свои собственные значения по умолчанию - возможно, 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.

Если вы хотите что-то отличное от любого из них, вам придется объяснить, что выИщите.

1 голос
/ 04 апреля 2011

Класс Record может устанавливать только те свойства, которые наследуются StudentRecord и DriverRecord. Если вы хотите установить свойства класса для их значений по умолчанию, вы должны переопределить метод (я бы сделал метод) и сделать что-то подобное (для StudentRecord):

public void override Initialize()
{
    base.Reset();

    this.StudentId = 0;
}

НТН

0 голосов
/ 03 июня 2011

Я думаю Шаблон нулевого объекта - это то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...