Инициализаторы объектовпредоставляют еще один способ создания объекта и инициализации его полей и свойств. (Подробнее о свойствах речь пойдет в главе 10.) Если используются инициализаторы объектов, то вместо обычного вызова конструктора класса указываются имена полей или свойств, инициализируемых первоначально задаваемым значением. Следовательно, синтаксис инициализатора объекта предоставляет альтернативу явному вызову конструктора класса. Синтаксис инициализатора объекта используется главным образом при создании анонимных типов в LINQ-выражениях. (Подробнее об анонимных типах и LINQ-выражениях — в главе 19.) Но поскольку инициализаторы объектов можно, а иногда и должно использовать в именованном классе, то ниже представлены основные положения об инициализации объектов.

Обратимся сначала к простому примеру.

// Простой пример, демонстрирующий применение инициализаторов объектов.

using System;

class MyClass { public int Count; public string Str;

class ObjlnitDemo { static void Main() {

// Сконструировать объект типа MyClass, используя инициализаторы объектов.

MyClass obj = new MyClass { Count = 100, Str = "Тестирование" };

Console.WriteLine(obj.Count + " " + obj.Str);

}

}

Выполнение этого кода дает следующий результат.

100 Тестирование

Как показывает результат выполнения приведенного выше кода, переменная экземпляраobj .Countинициализирована значением100,а переменная экземпляраobj . Str— символьной строкой "Тестирование". Но обратите внимание на то, что в классеMyClassотсутствуют явно определяемые конструкторы и не используется обычный синтаксис конструкторов. Вместо этого объектobjклассаMyClassсоздается с помощью следующей строки кода.

MyClass obj = new MyClass { Count = 100, Str = "Тестирование" };

В этой строке кода имена полей указываются явно вместе с их первоначальными значениями. Это приводит к тому, что сначала конструируется экземпляр объекта типаMyClass(с помощью неявно вызываемого по умолчанию конструктора), а затем задаются первоначальные значения переменныхCountиStrданного экземпляра.

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

MyClass obj = new MyClass { Str = "Тестирование", Count = 100 };

В этой строке кода инициализация переменной экземпляраStrпредшествует инициализации переменной экземпляраCount,а в приведенном выше коде все происходило наоборот. Но в любом случае результат получается одинаковым.

Перейти на страницу:

Похожие книги