Deklaracje typów wyjątków


Typy wyjątków są deklarowane podobnie jak inne klasy. Faktycznie, możliwe jest użycie instancji (egzemplarza) klasy jako wyjątku, ale rekomendowane jest, żeby wyjątki wywodziły się z klasy Exception zdefiniowanej w module SysUtils.

Można grupować wyjątki wg pokrewieństwa używając dziedziczenia. Przykładowo, poniższe deklaracje z modułu SysUtils definiują rodzinę typów wyjątków dla błędów matematycznych.

type
  EMathError = class(Exception);
  EInvalidOp = class(EMathError);
  EZeroDivide = class(EMathError);
  EOverflow = class(EMathError);
  EUnderflow = class(EMathError);

Poprzez takie deklaracje, można zdefiniować procedurę obsługi wyjątku EMathError (exception handler), który również obsługuje EInvalidOp, EZeroDivide, EOverflow, oraz EUnderflow.

Klasy wyjątków czasami definiują pola, metody lub właściwości, które przekazują dodatkowe informacje o błędzie. Przykład:

type EInOutError = class(Exception)
        ErrorCode: Integer;
     end;