Способы инициализации объектов в C#

Инициализация объектов

В этой статье я хочу рассказать об основных способах инициализации объектов в программах, написанных на C#. Как правило, после создания объекта, его нужно «привести» в некое начальное состояние, т.е. инициализировать. На самом деле, большинство случаев инициализации объектов можно разделить на три группы, который я опишу в этой статье.

Первый случай — это простое создание объекта с вызовом конструктора без аргументов. Подобные ситуации случаются если нам нужно просто создать объект, и мы не знаем подробностей, о том, как его инициализировать в данном контексте. Другими словами, конструктор без аргументов отлично справляется с поставленной задачей и большее нам не нужно. На практике, это выглядит так:

SomeClass tmpObj = new SomeClass();

Как видите, это самый простой способ создания объектов…

Следующий вариант — это вызов конструктора с аргументами. Такой подход используется тогда, когда «базовый» вариант инициализации нам не подходит (не обладает достаточной гибкостью). На практике, это может выглядеть как-то так (при условии, что класс «Person» имеет конструктор, принимающий в качестве аргументов имя и возраст человека):

//Создание "человека", с указанием имени и возраста
Person somePerson = new Person("Иван", 26);

Как видно из примера, объект создается с инициализацией полей в момент создания.

Третий вариант инициализации приходится использовать тогда, когда «базовый» вариант не походит (как и во втором случае), но в классе нет конструктора, удовлетворяющего всем потребностям. Например, в классе «Person» есть конструктор, принимающий, в качестве аргументов, имя и возраст человека, но мы хотим указать еще и его рост (для этого, в классе есть доступное свойство «Height«). Тогда мы можем поступить таким образом:

//Создание "человека", с указанием имени и возраста
Person somePerson = new Person("Иван", 26);
somePerson.Height = 190;

Как видно, запись уже не укладывается в один оператор, особенно, если за пределами конструктора нужно задать значение не одному свойству… Но выход есть и в этой ситуации, мы можем задать значения открытым свойствам сразу после создания объекта:

//Создание объекта смешанным способом
Person somePerson = new Person("Иван", 26) { Height = 190 };

Как видно, инициализация таким способом, производится в фигурных скобках, сразу после вызова конструктора. В фигурных скобках, указывается имя свойства, потом, через знак «=» указывается значение. Если нужно установит значение не одному свойству, как в примере выше, а нескольким, то запись выглядит примерно так (при условии, что у класса «Person» есть конструктор без аргументов):

//Создание объекта
Person somePerson = new Person() { Name = "Иван", Age = 26, Height = 190 };

Как видно, значения свойствам присваивается по очереди, через запятую.

Обратите внимание, что инициализация объектов способом представленным выше, имеет одну особенность: сначала вызывается конструктор (с аргументами или без), который выполняет совою инициализацию полей, а только потом задаются значения, указанные в фигурных скобках!

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

Добавить комментарий