C# - Главная Пространство имен
► System ► Microsoft Для учеников (начинающих)
► Видео уроки ► Обучение ► Примеры программ ► Секреты в Си Шарп Для профессионалов
► Обучение ► Примеры программ ► Задачки - для тебя! |
Абстрактные классы C#Методы класса могут быть объявлены как абстрактные. Это означает, что в этом классе нет реализации этих методов. Абстрактные методы пишутся с модификатором abstract. Класс, в котором есть хотя бы один абстрактный метод, называется абстрактным (в таком классе могут быть и обычные методы). Нельзя создавать экземпляры абстрактного класса — такой класс может использоваться только в качестве базового класса для других классов. Для потомка такого класса есть две возможности — или он реализует все абстрактные методы базового класса (и в этом случае для такого класса-потомка мы сможем создавать его экземпляры), или реализует не все абстрактные методы базового класса (в этом случае он является тоже абстрактным классом, и единственная возможность его использования — это производить от него классы потомки). Вот пример, иллюстрирующий использование абстрактных классов: using System; namespace test { abstract class Figure { //Площадь фигуры public abstract double square(); public abstract double perimeter(); } class Triangle: Figure 108 Раздел I I . Фундаментальные понятия double а, Ь, с; //Стороны //Конструктор public Triangle (double a, double b, double с) { this.a=a; this .b=-b; this.c=c; I public override double square() { //Используем формулу Герока double p - (aib+c)/2; return Math.Sqrt(p*(p-a)* (p-b)* (p-c)); I public override double perimeter() i return a-ib+c; class Rectangle: Figure { double a, b; //Стороны //Конструктор public Rectangle(double a, double b) { this.a=a; this.b=b; } public override double squared { return a*b; } public override double perimeter!) ! return (afb)*2; } } class Test { public static void Main() t Figure fl, f2; fl=new Triangle(3, 4, 5); f2=new Rectangle(2, 6); System.Console.WriteLine(f1.perimeter()i", "+ f1.square() System.Console . WriteLine (f 2 .perimeter ()•+", "+ f 2 . square () Результаты работы программы отобразятся как: 12, 6 16, 12 Тут мы объявляем абстрактный класс Figure, от которого производим два класса — Rectangle (класс прямоугольника) и Triangle (треугольника). В классе Figure есть два абстрактных метода — square (для подсчета площади) и perimeter (для периметра). Так как для произвольной фигуры формул для площади и для периметра не существует, то эти методы объявлены в классе Figure и переопределены в производных классах (с ключевым словом override). Далее в классе Test мы проводим испытание — заводим две переменные ссылочного типа базового класса Figure, ниже в эти ссылки мы записываем созданные экземпляры производных классов Triangle и Rectangle. Обратите внимание, что ссылку на абстрактный класс мы создать можем, а экземпляр — нет. Далее мы выводим на экран периметр и площадь для наших фигур. Просмотров: 6207 |