Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Абстрактный класс.

Предположим в базовом классе для какого-то наследуемого метода трудно придумать осмысленное наполнение. Например, вы реализуете иерархию геометрических фигур, и есть некоторый родительский класс Figure в котором определен метод Draw.

Задачей этого метода является рисование фигуры, однако для Figure тело Draw придется, скорее всего, оставить пустым, так как нарисовать абстрактную фигуру достаточно проблематично.
В этом случае вы можете объявить метод как абстрактный и не наполнять его каким – либо содержимым. Для этого нужно при объявлении метода указать модификатор abstract и не определить ему тела.

Класс, в котором существует хотя бы один абстрактный метод называется абстрактным классом. Класс, содержащий один или более абстрактных методов должен быть объявлен как абстрактный с помощью модификатора abstract. Невозможно создать ни одного объекта такого класса. Кстати вам уже известно данное понятие из C++ под названием абстрактный базовый класс.

Каждый дочерний класс, отнаследованный от абстрактного обязан реализовать все абстрактные методы, иначе класс-потомок также становится абстрактным и ему также нужно будет указать модификатор abstract. Абстрактный метод автоматически становится виртуальным, так что модификатор virtual при объявлении такого метода не нужен. Если же попытаться его указать произойдет ошибка на этапе компиляции.

В классе потомке при реализации абстрактного метода в объявлении нужно будет указать ключевое слово override.
Рассмотрим пример:

using System;
abstract class Figure{ // Абстрактный класс
	public Figure(string n){
		name=n;
	}
	private string name;
	public abstract void Draw(); // Абстрактный метод
	public void ShowName(){
		Console.WriteLine(name);
	}
}
class Rectangle:Figure{
	int width;
	int height;
	public	Rectangle(int height,int width):base("Прямоугольник"){
		this.width = width;
		this.height = height;
	}
	public override void Draw(){ // реализация абстрактного метода
		for(int i=0;i<height;i++){
			for(int j=0;j<width;j++){
				Console.Write("*");
			}
			Console.WriteLine();
		}
	}
}

class Sample
{
	static void Main() 
	{
		try{
			Rectangle rect = new Rectangle(3,8);
			rect.ShowName();
			rect.Draw();
		}
		catch(Exception e){
			Console.WriteLine(e.Message);
		}
		Console.Read();
	}
}


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru