Console.WriteLine("Сведения об объекте t2: "); t2.ShowStyle(); t2.ShowDim(); t2.ShowColor() ;

Console.WriteLine("Площадь равна " + t2.Area());

}

}

При выполнении этой программы получается следующей результат.

Сведения об объекте tl:

Треугольник прямоугольный Ширина и высота равны 8 и 12 Цвет синий Площадь равна 48

Сведения об объекте t2:

Треугольник равнобедренный Ширина и высота равны 2 и 2 Цвет красный Площадь равна 2

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

Приведенный выше пример демонстрирует еще одно важное положение: ключевое словоbaseвсегда обозначает ссылку на конструктор ближайшего по иерархии базового класса. Так, ключевое словоbaseв классеColorTriangleобозначает вызов конструктора из классаTriangle,а ключевое словоbaseв классеTriangle— вызов конструктора из классаTwoDShape.Если же в иерархии классов конструктору базового класса требуются параметры, то все производные классы должны предоставлять эти параметры вверх по иерархии, независимо от того, требуются они самому производному классу или нет.

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

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

// Продемонстрировать порядок вызова конструкторов.

using System;

// Создать базовый класс, class А {

public А()    {

Console.WriteLine("Конструирование класса А.");

}

}

// Создать класс, производный от класса А. class В : А { public В()    {

Console.WriteLine("Конструирование класса В.");

}

}

/

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

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