Определяет процедуру, вызываемую при вызыве абстрактного метода
System unit
var AbstractErrorProc : Pointer;
Описание
Переменная 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
Ошибка : Вызван абстрактный метод.