Справочник функций и процедур Delphi: AbstractErrorProc

  Навигация по первой букве:

A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z

  Навигация по категории:

Compiler directives, Directives, Keywords / Types, Variables, Constants / Functions, Procedures

AbstractErrorProc
Переменная
Определяет процедуру, вызываемую при вызыве абстрактного метода System unit
  var AbstractErrorProc : Pointer;

Delphi Sources

Описание
Переменная 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
 


Последние добавленные на сайт исходники

DeLiKaTeS Tetris (Тетрис)

TDictionary Custom Sort

Fast Watermark Sources

3D Designer

Sik Screen Capture

Patch Maker

 

Айболит (remote control)

ListBox Drag & Drop

Доска для игры Реверси

Графические эффекты

Рисование по маске

Перетаскивание изображений

 

Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software (источник – "DelphiBasics")

Группа ВКонтакте