Общий метод абстрактного класса в C#
Абстрактный класс может содержать и готовые методы с телом, не только абстрактные объявления.
Общий код удобно держать в базе: один
метод вызывает абстрактные, а потомки
подставляют только формулы. Запишем Figure
с методом Describe и выведем отчет
для круга:
abstract class Figure
{
public abstract int Area();
public abstract int Perimeter();
public void Describe()
{
Console.WriteLine(Area() + " " + Perimeter());
}
}
class Circle : Figure
{
public int Radius;
public Circle(int radius)
{
Radius = radius;
}
public override int Area()
{
return 3 * Radius * Radius;
}
public override int Perimeter()
{
return 2 * 3 * Radius;
}
}
Создадим объект класса Circle и выведем общий отчет:
var circle = new Circle(2);
circle.Describe();
При вызове Describe у объекта Circle
срабатывает полиморфизм: внутри базового
метода выполняются переопределенные Area
и Perimeter. Потомки не дублируют вывод -
они только считают числа.
Сделайте в Figure метод Describe,
который выводит площадь и периметр.
Реализуйте класс Circle с абстрактными
методами Area и Perimeter.
Сделайте абстрактный Document
с абстрактным методом Render.
Сделайте PdfDocument
и HtmlDocument, возвращающие
из Render свою строку.
Добавьте в Document метод Title
с общим заголовком и абстрактный
метод FormatName. Реализуйте
FormatName в каждом наследнике.