Описание |
Переменная AbstractErrorProc указывает для Delphi процедуру, которая должна быть вызвана когда ваш код ошибочно вызывает абстрактный метод класса.
Абстрактные методы являются методами метками - заполнителями, осуществляемыми только полученными классами. Родительский класс реально является скелетным классом, и поэтому не должен проиллюстрирован в объекте. Delphi вас предупреждает, если вы вызывете абстрактный метод, он перед завершением с ошибкой вызовет AbstractErrorProc. Если не найден, то вместо этого выбрасывается исключение EAbstractError.
|
|
Примечания |
Вы должны избегать вызова абстрактных методов.
|
|
Похожие команды |
Abstract Определяет метод класса, осуществляемый только в подклассах
Addr Возвращает адрес переменной, функции или процедуры
Procedure Определяет подпрограмму, которая не возвращает значение
| |
|
Пример кода : Класс многоугольника с вызовом абстрактного метода |
// Полный код Модуля. // ----------------------------------------------------------- //
Вы должны поместить этот код в модуль с именем Unit1 и с формой //
названную Form1, которая имеет событие OnCreate названное FormCreate.
unit Unit1;
interface
uses
Forms, Dialogs, Classes, Controls, StdCtrls, SysUtils;
type // Определение базового класса TPolygon : //
Этот класс - треугольник если 3 стороны, квадрат если 4 стороны...
TPolygon = class
private sideCount : Integer; //
Сколько сторон? sideLength : Integer; //
Какой длины каждая сторона? shapeArea : Double; // Площадь
многоугольника
protected procedure setArea; Virtual; Abstract; //
Не может закодировать пока стороны не известны
published
property count : Integer read sideCount;
property length : Integer read sideLength;
property area : Double read shapeArea;
constructor Create(sides, length : Integer);
end;
// Определение потомков треугольника
и квадрата
TSquare = class(TPolygon)
protected procedure setArea; override; //
Замена абстрактного метода
end;
// Определение класса формы
используемой этим модулем
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm} //
Вложение определений формы
// Создание объекта TPolygon
constructor TPolygon.Create(sides, length : Integer);
begin // Сохранение числа и длины
сторон
sideCount := sides;
sideLength := length;
// Установка области, используя метод setArea : //
Этот запрос будет удовлетворён только подклассом
setArea;
end;
// Выполнение родительского для треугольника
абстрактного метода setArea
procedure TSquare.setArea;
begin // Вычисление и сохранение
площади треугольника
shapeArea := sideLength * sideLength;
end;
procedure ReportAbstractError;
begin // Сообщение об ошибке
ShowMessage('Ошибка : Вызван абстрактный метод.');
end;
// Основная линия кода
procedure TForm1.FormCreate(Sender: TObject);
var
square : TSquare;
polygon : TPolygon;
begin // Установка процедуры для
перехвата вызовов abstract ошибок
AbstractErrorProc := Addr(ReportAbstractError);
// Создание квадрата
square := TSquare.Create(4, 10);
// Показ площади квадрата
ShowMessageFmt('Площадь квадрата = %f',[square.area]);
// Попытка создать многоугольник
(внутренне вызывая абстрактный метод) polygon := TPolygon.Create(2, 10); //
Бессмысленная форма!
// Показ площади многоугольника
ShowMessageFmt('Площадь многоугольника = %f',[polygon.area]);
end;
end.
|
Площадь квадрата = 100.0
Ошибка : Вызван абстрактный метод.
Затем программа заканчивается с диалогом ошибки:
Runtime error 210 at 00452208
|
|