Разное
Последние книги
Самое популярное
Все бесплатно
Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.
Навигация
Вопросы
Как найти наибольший общий делитель
Категория: Математика
Категория: Математика
Добавление текстовой информации в .ехе-файл и чтение ее
Категория: Файловая система
Категория: Файловая система
Undo в memo
Категория: Компоненты
Категория: Компоненты
Получить первую и последнюю видимую строку в TRichEdit
Категория: Текст и строки
Категория: Текст и строки
Упаковка ZIPTV
Категория: Компоненты
Категория: Компоненты
Перекодировка в DBASE
Категория: Базы данных
Категория: Базы данных
Компоненты TrackBar и ScrollBar
Категория: Компоненты
Категория: Компоненты
Изменить пароль для Paradox
Категория: Базы данных
Категория: Базы данных
Подсветить часть текста в DBGrid
Категория: Компоненты
Категория: Компоненты
Получить имена всех папок и файлов в директории
Категория: Файловая система
Категория: Файловая система
Delphi - Справочник: AbstractErrorProc
AbstractErrorProc
|
var AbstractErrorProc : Pointer; |
Переменная (Unit System)
|
Определяет процедуру, вызываемую при вызыве абстрактного метода
|
Описание:
|
Переменная AbstractErrorProc указывает для Delphi процедуру, которая должна быть вызвана когда ваш код ошибочно вызывает абстрактный метод класса. Абстрактные методы являются методами метками - заполнителями, осуществляемыми только полученными классами. Родительский класс реально является скелетным классом, и поэтому не должен проиллюстрирован в объекте. Delphi вас предупреждает, если вы вызывете абстрактный метод, он перед завершением с ошибкой вызовет AbstractErrorProc. Если не найден, то вместо этого выбрасывается исключение EAbstractError. |
Пример кода: Класс многоугольника с вызовом абстрактного метода
|
// Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем 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 |
Примечание:
|
Вы должны избегать вызова абстрактных методов. |