Книга: C# 4.0: полное руководство

Порядок вызова конструкторов

Порядок вызова конструкторов

В связи с изложенными выше в отношении наследования и иерархии классов может возникнуть следующий резонный вопрос: когда создается объект производного класса и какой конструктор выполняется первым — тот, что определен в производном классе, или же тот, что определен в базовом классе? Так, если имеется базовый класс А и производный класс В, то вызывается ли конструктор класса А раньше конструктора класса В? Ответ на этот вопрос состоит в том, что в иерархии классов конструкторы вызываются по порядку выведения классов: от базового к производному. Более того, этот порядок остается неизменным независимо от использования ключевого слова base. Так, если ключевое слово base не используется, то выполняется конструктор по умолчанию, т.е. конструктор без параметров. В приведенном ниже примере программы демонстрируется порядок вызова и выполнения конструкторов.

// Продемонстрировать порядок вызова конструкторов.
using System;
// Создать базовый класс,
class А {
  public А() {
    Console.WriteLine("Конструирование класса А.");
  }
}
// Создать класс, производный от класса А.
class В : А {
  public В() {
    Console.WriteLine("Конструирование класса В.");
  }
}
// Создать класс, производный от класса В.
class С : В {
  public С()    {
    Console.WriteLine("Конструирование класса С.");
  }
}
class OrderOfConstruction {
  static void Main() {
    С с = new С();
  }
}

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

Конструирование класса А.
Конструирование класса В.
Конструирование класса С.

Как видите, конструкторы вызываются по порядку выведения их классов.

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

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


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