На этом шаге мы проиллюстрируем порядок выполнения конструкторов и деструкторов при наследовании.
Еще один пример, представленный в примере ниже, иллюстрирует последовательность вызова конструкторов и деструкторов при создании и удалении объекта производного класса, когда имеет место цепочка наследования.
 Имеется в виду многоуровневое наследование, при котором производный класс сам является базовым для другого производного класса, а этот производный класс также 
является базовым для следующего производного класса и так далее.
 
Имеется в виду многоуровневое наследование, при котором производный класс сам является базовым для другого производного класса, а этот производный класс также 
является базовым для следующего производного класса и так далее.
В представленной далее программе описывается базовый класс Alpha, на основе которого создается класс Bravo, а на основе этого класса создается класс Charlie. Каждый из классов содержит описание конструктора и деструктора. В каждом классе конструктор и деструктор выводят в консольное окно сообщение. В главном методе программы создается анонимный объект класса Charlie. Интересующий нас программный код представлен ниже.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr142_1 { // Базовый класс: class Alpha { // Конструктор: public Alpha() { Console.WriteLine("Конструктор класса Alpha"); } // Деструктор: ~Alpha() { Console.WriteLine("Деструктор класса Alpha"); } } // Производный класс от класса Alpha: class Bravo: Alpha { // Конструктор: public Bravo(): base() { Console.WriteLine("Конструктор класса Bravo"); } // Деструктор: ~Bravo() { Console.WriteLine("Деструктор класса Bravo"); } } // Производный класс от класса Bravo: class Charlie: Bravo { // Конструктор: public Charlie(): base() { Console.WriteLine("Конструктор класса Charlie"); } // Деструктор: ~Charlie() { Console.WriteLine("Деструктор класса Charlie"); } } // Класс с главным методом: class Program { // Главный метод: static void Main() { // Создание анонимного объекта: new Charlie(); } } }
При выполнении программы получим такой результат.

Рис.1. Результат выполнения программы
При выполнении команды
  new Charlie();
Сразу после создания анонимного объекта класса Charlie программа завершает свое выполнение, и, следовательно, созданный объект удаляется из памяти. Вызывается деструктор класса Charlie. После выполнения команд из тела деструктора класса Charlie вызывается деструктор класса Bravo. Когда выполнены команды из деструктора класса Bravo, вызывается деструктор класса Alpha. Как отмечалось ранее, порядок вызова конструкторов и деструкторов легко проследить по сообщениям, которые появляются в консольном окне.
 Напомним, что для запуска приложения на выполнение в среде Visual Studio так, чтобы после выполнения программы консольное окно не закрывалось автоматически, следует нажать комбинацию клавиш 
Ctrl+F5.
 
Напомним, что для запуска приложения на выполнение в среде Visual Studio так, чтобы после выполнения программы консольное окно не закрывалось автоматически, следует нажать комбинацию клавиш 
Ctrl+F5.
На следующем шаге мы рассмотрим объектные переменные базовых классов.