Принудительное возбуждение исключительных ситуаций

   
На этом шаге мы рассмотрим программное возбуждение исключительных ситуаций.

   
Дополнительные возможности обработки исключений в языке Object Pascal предоставляются зарезервированным словом raise, которое
предназначено для принудительного возбуждения исключительной ситуации. По синтаксису после raise может быть указан вызов конструктора,
который создает объект, принадлежащий к классу исключений, в результате чего возникнет исключительная ситуация, описываемая этим объектом.
Причем этот объект может принадлежать как к одному из стандартных классов обработки исключений модуля SysUtils, так и к описанному пользователем
классу, являющемуся потомком класса Exception или его наследников.

   
В простейшем случае, когда в блоке обработки исключения указывается только одно слово raise без вызова конструктора, будет вызван системный
обработчик исключительной ситуации, которая в данный момент обрабатывается этим блоком. Такая форма вызова raise используется тогда, когда
требуется не вообще заменить системную реакцию на исключение своей, а только выполнить некоторые действия перед стандартной обработкой исключения.

try
    СписокОператоров1 
except
  on Исключение1   do 
  begin
    Операторы предварительной  обработки
    raise;   {   Вызов  стандартного  обработчика Исключения1   } 
  end; 
end;

   
Для определения собственного типа исключительных ситуаций нужно описать класс, являющийся наследником стандартного класса Exception. Простейшее описание имеет вид:

type
  EMyException = class(Exception)

   
Для возбуждения исключительной ситуации класса EMyException достаточно выполнить вызов:

  raise EMyException.Create('Сообщение моего исключения');

   
Если требуется обеспечить доступ к свойствам (например Message) и методам конкретного объекта исключительной ситуации, то при
описании блока обработки исключения перед идентификатором класса исключения (например EMyException) ставится пользовательский идентификатор
(например MyExptId), обозначающий объект этого класса:

  on MyExptId : EMyException do 
  begin
    MyExptId.Message := 'Сообщение моего исключения';
    .    .    .    .    .
  end;

   
В заключение рассмотрения оператора try, приведем описание базового класса Exception и иерархию его классов-потомков, предназначенных для обработки исключительных ситуаций:

Exception = class(TObject) 
private
  FMessage: string; FHelpContext: Integer; public
  constructor Create(const Msg: string); 
  constructor CreateFmt(const Msg: string; const Args: array of const); 
  constructor CreateRes(Ident: Integer); 
  constructor CreateResFmt(Ident: Integer; const Args: array of const); 
  constructor CreateHelp(const Msg: string; AHelpContext: Integer); 
  constructor CreateFmtHelp(const Msg: string; 
        const Args array of const; AHelpContext: Integer); 
  constructor CreateResHelp(Ident: Integer; AHelpContext: Integer); 
  constructor CreateResFmtHelp(Ident: Integer; 
        const Args array of const; AHelpContext: Integer); 
  property HelpContext: Integer read FHelpContext write FHelpContext;
  property Message: string read FMessage write FMessage; 
end; 
  ExceptClass = class of Exception;


Рис.1. Иерерхия классов-наследников

   
Со следующего шага мы начнем знакомиться с управляющими процедурами.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий