Все бесплатно
    Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.



Вопросы
  Как найти наибольший общий делитель
   Категория: Математика
  Undo в memo
   Категория: Компоненты
  Упаковка ZIPTV
   Категория: Компоненты
  Перекодировка в DBASE
   Категория: Базы данных
  Компоненты TrackBar и ScrollBar
   Категория: Компоненты
  Изменить пароль для Paradox
   Категория: Базы данных
  Подсветить часть текста в DBGrid
   Категория: Компоненты
  Получить имена всех папок и файлов в директории
   Категория: Файловая система

Delphi - Справочник: AbstractErrorProc

ABCDEFGHIJKLMNOPQRSTUVWXYZ

  << Вернуться  

 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
Примечание:
Вы должны избегать вызова абстрактных методов.

  << Вернуться