В связи с изложенными выше в отношении наследования и иерархии классов может возникнуть следующий резонный вопрос: когда создается объект производного класса и какой конструктор выполняется первым — тот, что определен в производном классе, или же тот, что определен в базовом классе? Так, если имеется базовый класс А и производный класс В, то вызывается ли конструктор класса А раньше конструктора класса В? Ответ на этот вопрос состоит в том, что в иерархии классов конструкторы вызываются по порядку выведения классов: от базового к производному. Более того, этот порядок остается неизменным независимо от использования ключевого слова base. Так, если ключевое слово base не используется, то выполняется конструктор по умолчанию, т.е. конструктор без параметров.
// Продемонстрировать порядок вызова конструкторов.
using System;
// Создать базовый класс.
class А
{
public А()
{
Console.WriteLine("Конструирование класса А.");
}
}
// Создать класс, производный от класса А.
class В: А
{
public В()
{
Console.WriteLine("Конструирование класса В.");
}
}
// Создать класс, производный от класса В.
class С: В
{
public С()
{
Console.WriteLine("Конструирование класса С.");
}
}
class OrderOfConstruction
{
static void Main()
{
С с = new С();
}
}
Вот к какому результату приводит выполнение этой программы.
Конструирование класса А.
Конструирование класса В.
Конструирование класса С.