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

// Применить инициализаторы объектов в свойствах.

class MyClass {

11Теперь это свойства, public int Count { get; set; } public string Str { get; set; }

}

class ObjlnitDemo { static void Main() {

// Сконструировать объект типа MyClass с помощью инициализаторов объектов.

MyClass obj =

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

Console .WriteLine (obj .Cour^t + " " + obj.Str);

}

}

Как видите, свойстваCountиStrустанавливаются в выражениях с инициализатором объекта. Приведенная выше программа дает такой же результат, как и программа из главы 8, а именно:

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

Как пояснялось в главе 8, синтаксис инициализатора объекта оказывается наиболее пригодным для работы с анонимными типами, формируемыми в LINQ-выражениях. А в остальных случаях чаще всего используется синтаксис обычных конструкторов.

Ограничения, присущие свойствам

Свойствам присущ ряд существенных ограничений. Во-первых, свойство не определяет место для хранения данных, и поэтому не может быть передано методу в качестве параметраrefилиout.Во-вторых, свойство не подлежит перегрузке. Наличие двух разных свойств с доступом к одной и той же переменной допускается, но это, скорее, исключение, чем правило. И наконец, свойство не должно изменять состояние базовой переменной при вызове аксессораget.И хотя это ограничительное правило не соблюдается компилятором, его нарушение считается семантической ошибкой. Действие аксессораgetне должно носить характер вмешательства в функционирование переменной.

Применение модификаторов доступа в аксессорах

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

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