Для того чтобы продемонстрировать применение ключевого словаbaseна конкретном примере, рассмотрим еще один вариант классаTwoDShapeв приведенной ниже программе. В данном примере определяется конструктор, инициализирующий свойстваWidthиHeight.Затем этот конструктор вызывается конструктором классаTriangle.
// Добавить конструктор в класс TwoDShape. using System;
// Класс для двумерных объектов, class TwoDShape { double pri_width; double pri_height;
// Конструктор класса TwoDShape. public TwoDShape(double w, double h) {
Width = w;
Height = h;
}
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;
// Вызвать конструктор базового класса.
public Triangle(string s, double w, double h) : base(w, h) Style = s;
}
// Возвратить площадь треугольника, public double Area {
return Width * Height / 2;
}
// Показать тип треугольника, public void ShowStyleO {
Console.WriteLine("Треугольник " + Style);
}
}
class Shapes4 {
static void Main {
Triangle tl = new Triangle("равнобедренный", 4.0, 4.0); Triangle t2 = new Triangle("прямоугольный", 8.0, 12.0); Console.WriteLine("Сведения об объекте tl: "); tl.ShowStyle; tl.ShowDim;
Console.WriteLine("Площадь равна " + tl.AreaO);
Console.WriteLine;
Console.WriteLine("Сведения об объекте t2: "); t2.ShowStyle; t2.ShowDim;
Console.WriteLine("Площадь равна " + t2.Area);
Теперь конструктор классаTriangleобъявляется следующим образом.
public Triangle(
string s, double w, double h) : base(w, h) {
В данном варианте конструкторTriangle вызывает методbaseс параметрами w иh.Это, в свою очередь, приводит к вызову конструктораTwoDShape , инициализирующего свойстваWidthиHeightзначениями параметровwиh.Они больше не инициализируются средствами самого классаTriangle,где теперь остается инициализировать только его собственный членStyle,определяющий тип треугольника. Благодаря этому классTwoDShapeвысвобождается для конструирования своего по-добъекта любым избранным способом. Более того, в классTwoDShapeможно ввести функции, о которых даже не будут подозревать производные классы, что предотвращает нарушение существующего кода.