Справочник функций и процедур 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;

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


Copyright © 2004-2016 Delphi Sources (источник – "DelphiBasics.ru")
 


Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook