Книга: C# для профессионалов. Том II

Списки инициализации конструктора

Списки инициализации конструктора

Конструкторы C# могут иметь элементы, которые выглядят как списки инициализации конструктора C++. Однако в C# такой список содержит только максимум один член и называется инициализатором конструктора. Элемент в инициализаторе должен быть либо конструктором непосредственного базового класса, либо другим конструктором того же класса. Синтаксис этих двух вариантов использует ключевые слова base и this соответственно:

class MyClass : MyBaseClass {
 MyClass(int X)
 : base(X) // выполняет конструктор MyBaseClass с одним параметром
 {
  // здесь другая инициализация
 }
 MyClass()
 : this(10) // выполняет конструктор MyClass с одним параметром,
            // передавая в него значение 10
 {
  // здесь другая инициализация
 }

Если явно не задан никакой список инициализации конструктора, то компилятор будет неявно использовать список из элемента base(). Другими словами, инициализатор по умолчанию вызывает конструктор по умолчанию базового класса. Это поведение совпадает с C++.

В отличие от C++ нельзя поместить переменные члены в список инициализации конструктора. Однако это только вопрос синтаксиса, так как эквивалент C# должен отметить свои начальные значения в определении класса.

Более серьезным различием является тот факт, что можно поместить только один иной конструктор в список. Это влияет на способ разработки конструкторов, хотя несомненно полезно, так как заставляет использовать хорошо определенную и эффективную парадигму организации конструкторов. Эта парадигма указана в приведенном выше коде. Все конструкторы следуют единому порядку, в котором выполняются различные конструкторы.

Оглавление книги


Генерация: 1.438. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз