Используя абстрактный класс, мы можем усовершенствовать рассматривавшийся ранее классTwoDShape.Для неопределенной двухмерной фигуры понятие площади не имеет никакого смысла, поэтому в приведенном ниже варианте классаTwoDShapeметодArea и сам классTwoDShapeобъявляются какabstract.Это, конечно, означает, что во всех классах, производных от классаTwoDShape,должен быть переопределен методArea .
// Создать абстрактный класс, using System;
abstract class TwoDShape { double pri_width; double pri_height;
// Конструктор, используемый по умолчанию, public TwoDShape {
Width = Height =0.0; name = "null";
}
// Параметризированный конструктор.
public TwoDShape(double w, double h, string n) {
Width = w;
Height = h; name = n;
}
// Сконструировать объект равной ширины и высоты, public TwoDShape(double х, string n) {
Width = Height = x; name = n;
}
// Сконструировать копию объекта TwoDShape. public TwoDShape(TwoDShape ob) {
Width = ob.Width;
Height = ob.Height; name = ob.name;
}
// Свойства ширины и высоты объекта, 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 string name { get; set; } public void ShowDimO {
Console.WriteLine("Ширина и высота равны " +
Width + " и " + Height);
}
// Теперь метод Area является абстрактным, public abstract double Area;
}
// Класс для треугольников, производный от класса TwoDShape. class Triangle : TwoDShape { string Style;
// Конструктор, используемый по умолчанию, public Triangle {
Style = "null";
}
// Конструктор для класса Triangle, public Triangle(string s, double w, double h) : base(w, h, "треугольник") {
Style = s;
}
// Сконструировать копию объекта типа Triangle, public Triangle(Triangle ob) : base(ob) {
Style = ob.Style;
}
// Переопределить метод Area для класса Triangle, public override double Area {
return Width * Height / 2;
}
// Показать тип треугольника, public void ShowStyle {
Console.WriteLine("Треугольник " + Style);
}
}
// Класс для прямоугольников, производный от класса TwoDShape class Rectangle : TwoDShape {
// Конструктор для класса Rectangle, public Rectangle(double w, double h) : base(w, h, "прямоугольник"){ }
// Сконструировать квадрат, public Rectangle(double x) : base (x, "прямоугольник")- { }