В данном варианте конструкторTriangle() вызывает методbaseс параметрами w иh.Это, в свою очередь, приводит к вызову конструктораTwoDShape (), инициализирующего свойстваWidthиHeightзначениями параметровwиh.Они больше не инициализируются средствами самого классаTriangle,где теперь остается инициализировать только его собственный членStyle,определяющий тип треугольника. Благодаря этому классTwoDShapeвысвобождается для конструирования своего по-добъекта любым избранным способом. Более того, в классTwoDShapeможно ввести функции, о которых даже не будут подозревать производные классы, что предотвращает нарушение существующего кода.

С помощью ключевого словаbaseможно вызвать конструктор любой формы, определяемой в базовом классе, причем выполняться будет лишь тот конструктор, параметры которого соответствуют переданным аргументам. В качестве примера ниже приведены расширенные варианты классовTwoDShapeиTriangle,в которые включены как используемые по умолчанию конструкторы, так и конструкторы, принимающие один аргумент.

// Добавить дополнительные конструкторы в класс TwoDShape.

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 ShowDimO {

Console.WriteLine("Ширина и высота равны " +

Width + " и " + Height);

}

}

// Класс для треугольников, производный от класса TwoDShape. class Triangle : TwoDShape { string Style;

/* Конструктор, используемый по умолчанию.

Автоматически вызывает конструктор, доступный по умолчанию в классе TwoDShape. */ public Triangle()    {

Style = "null";

}

// Конструктор, принимающий три аргумента, public Triangle(

string s, double w, double h) : base(w, h) {

Style = s;

}

// Сконструировать равнобедренный треугольник, public Triangle(double x) : base(x) {

Style = "равнобедренный";

}

// Возвратить площадь треугольника, public double Area()    {

return Width * Height / 2;

}

// Показать тип треугольника, public void ShowStyleO {

Console.WriteLine("Треугольник " + Style);

}

}

class Shapes5 {

static void Main() {

Triangle tl    =    new    Triangle();

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

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