Главная Обратная связь

Дисциплины:






Основы C#. Урок 19. Абстрактные классы



Методы класса могут быть объявлены как абстрактные. Это означает, что в этом классе нет реализации этих методов. Абстрактные методы пишутся с модификатором abstract. Класс, в котором есть хотя бы один абстрактный метод, называется абстрактным (а таком классе могу быть и обычные методы). Нельзя создавать экземпляры абстрактного класса - такой класс может использоваться только в качестве базового класса для других классов. Для потомка такого класса есть две возможности - или он реализует все абстрактные методы базового класса (и в этом случае для такого класса-потомка мы сможем создавать его экземпляры), или он реализует не все абстрактные методы базового класса (в этом случае он является тоже абстрактным классом и единственная возможность его использования - это производить от него классы-потомки). Вот пример, иллюстрирующий использование абстрактных классов:

using System;namespace test{ abstractclass Figure { //Площадь фигуры publicabstractdouble square(); publicabstractdouble perimeter(); } class Triangle: Figure { double a, b, c; //Стороны //Конструктор public Triangle(double a, double b, double c) { this.a=a; this.b=b; this.c=c; } publicoverridedouble square() { //Используем формулу Герона double p = (a+b+c)/2; return Math.Sqrt(p*(p-a)*(p-b)*(p-c)); } publicoverridedouble perimeter() { return a+b+c; } } class Rectangle: Figure { double a, b; //Стороны //Конструктор public Rectangle(double a, double b) { this.a=a; this.b=b; } publicoverridedouble square() { return a*b; } publicoverridedouble perimeter() { return (a+b)*2; } } class Test { publicstaticvoid Main() { Figure f1, f2; f1=new Triangle(3, 4, 5); f2=new Rectangle(2, 6); System.Console.WriteLine(f1.perimeter()+", "+ f1.square()); System.Console.WriteLine(f2.perimeter()+", "+ f2.square()); } }}

Тут мы объявляем абстрактный класс Figure, от которого производим два класса - Rectangle (класс прямоугольника) и Triangle (треугольника). В классе Figure есть два абстрактных метода - square (для подсчета площади) и perimeter (для периметра). Так как для призвольной фигуры формул для площади и для периметра не существует, то эти методы объявлены в классе Figure и переопределены в производных классах (с ключевым словом override). Далее в классе Test мы проводим испытание - заводим две переменные типа ссылка на базовый класс Figure, ниже в эти ссылки мы записываем созданные экземпляры производных классов Triangle и Rectangle. Обратите внимание, что ссылку на абстрактный класс мы создать можем, а экземпляр - нет. Далее мы выводим на экран периметр и площадь для наших фигур.

Основы C#. Урок 20. Запрещение наследования или модификатор sealed



На прошлом уроке мы рассмотрели абстрактные классы. Их основное назначение - быть предками для других классов. На другом конце иерархии стоят так называемые sealed-классы. От них нельзя производить другие классы. Синтаксис для тах такой же, как и для обычных классов, за исключением ключевого слова sealed. Вот пример:

... sealedclass MyClass { //Методы и переменные класса int x; ... } class MyClass2: MyClass //Ошибка! { ... } ...

Как вы видите, от sealed-класса MyClass нельзя делать классы-потомки.





sdamzavas.net - 2019 год. Все права принадлежат их авторам! В случае нарушение авторского права, обращайтесь по форме обратной связи...