// Здесь скрывается метод Show из класса А. Обратите // внимание на применение ключевого слова new. new public void Show {
base.Show ; // здесь вызывается метод Show из класса А
// далее выводится член i из класса В
Console.WriteLine("Член i в производном классе: " + i);
}
}
class UncoverName { static void Main {
В ob = new В (1, 2); ob.Show ;
}
}
Выполнение этого кода приводит к следующему результату.
Член 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; }