5 марта 2011 г.

Инициализация всех свойств класса в одной инструкции

Немного об инициализации публичных членов класса. Довольно часто бывает так, что нужно в коде проинициализировать члены класса (как правило, свойства) при создании объекта. Итак, пусть у нас есть довольно простой класс для хранения всех полей одной записи.


public class Record
{
public string Header { get; set; }
public string Text;
public DateTime Created { get; set; }
}

Обратите внимание, что в классе имеется как свойство (Header), так и открытый член класса (Text). Традиционно все эти поля при создании объекта мы инициализируем либо через параметры конструктора, либо, если его нет, как в нашем случае, отдельно каждое поле.


Record NewRecord = new Record();
NewRecord.Header = "Заголовок";
NewRecord.Text = "Текст записи.";
NewRecord.Created = DateTime.Now;

Вроде бы ничего, но если в классе таких параметров штук 20, то получается очень громоздко. Более краткая запись в одну строчку:

Record NewRecord = new Record() { Header = "Заголовок", Text = "Текст записи.", Created = DateTime.Now };

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

Но здесь есть один нюанс. Вы можете запросто забыть проинициализировать в фигурных скобках одно свойство. Если она имеет ссылочный тип, то будет иметь ссылку на null. Поэтому при первом обращении к этому объекту будет сгенерировано исключение NullReferenceException. Поэтому рассмотренную выше конструкцию рекомендуется использовать в качестве быстрой инициализации для очень простых классов, которые состоят только из свойств.

Комментариев нет:

Отправить комментарий