Член i в базовом классе: 1 Член i в производном классе: 2
Как видите, в выражении base. Show () вызывается вариант метода Show () из базового класса.
Обратите также внимание на следующее: ключевое слово new используется в приведенном выше коде с целью сообщить компилятору о том, что метод Show (), вновь объявляемый в производном классе В, намеренно скрывает другой метод Show (), определенный в базовом классе А.
Создание многоуровневой иерархии классов
В представленных до сих пор примерах программ использовались простые иерархии классов, состоявшие только из базового и производного классов. Но в C# мож
но также строить иерархии, состоящие из любого числа уровней наследования. Как упоминалось выше, многоуровневая иерархия идеально подходит для использования одного производного класса в качестве базового для другого производного класса. Так, если имеются хри класса, А, В и С, то класс С может наследовать от класса В, а тот, в свою очередь, от класса А. В таком случае каждый производный класс наследует характерные особенности всех своих базовых классов. В частности, класс С наследует все члены классов В и А.
Для того чтобы показать, насколько полезной может оказаться многоуровневая иерархия классов, рассмотрим следующий пример программы. В ней производный класс Triangle служит в качестве базового для создания другого производного класса — ColorTriangle. При этом класс ColorTriangle наследует все характерные особенности, а по существу, члены классов Triangle и TwoDShape, к которым добавляется поле color, содержащее цвет треугольника.
// Пример построения многоуровневой иерархии классов.
using System;
class TwoDShape { double pri_width; double pri_height;
// Конструктор, используемый по умолчанию, public TwoDShape() {
Width = Height = 0.0;
}
// Конструктор для класса TwoDShape. public TwoDShape(double w, double h) {
Width = w;
Height = h;
}
// Сконструировать объект равной ширины и высоты, public TwoDShape(double х) {
Width = Height = x;
}
// Свойства ширины и высоты объекта, public double Width {
get { return pri_width; }
set { pri_width = value < 0 ? -value : value; }
}
public double Height {
get { return pri_height; }
set { pri_height = value < 0 ? -value : value; }
}
public void ShowDim() {
Console.WriteLine('Ширина и высота равны ' +
Width + ' и ' + Height);
}
// Класс для треугольников, производный от класса TwoDShape. class Triangle : TwoDShape {
string Style; // закрытый член класса
/* Конструктор, используемый по умолчанию.
Автоматически вызывает конструктор, доступный по умолчанию в классе TwoDShape. */ public Triangle () {
Style = 'null';
