下面的代碼同時使用了異常響應和異常保護
var
APointer: Pointer ;
AInt
begin
ADiv :=
GetMem ( APointer
try
try
AInt :=
except
on EDivByZero do
begin
AInt :=
raise;
end;
end;
finally
FreeMem ( APointer
end;
end;
上面一段代碼體現了異常處理的嵌套
利用Delphi的異常類機制我們可以定義自己的異常類來處理程序執行中的異常情況
使用自定義異常需要
異常是對象
下面是一個異常類的定義
type
EMyException = Class(Exception) ;
引發一個異常
假如定義
type
EPasswordInvalid = Class(Exception)
則在程序中如下的語句將引發一個EPasswordInvalid異常
If Password <> CorrectPassword then
raise EPasswordInvalid
異常產生時把System庫單元中定義的變量ErrorAddr的值置為應用程序產生異常處的地址
在自己引發一個異常時
為異常分配一個錯誤地址需要使用保留字at
raise EInstance at Address_Expession;
下面我們給出一個利用自定義異常編程的完整實例
兩個標簽框(Label
設計時
自定義異常EInvalidPassWord和EInvalidInput分別用於表示輸入的口令非法和數字非法
下面是三個異常類的定義
type
EInValidation = class(Exception)
public
ErrorCode: Integer;
constructor Create(Const Msg: String;ErrorNum: Integer)
end;
EInvalidPassWord = class(EInValidation)
public
constructor Create;
end;
EInvalidInput = class(EInValidation)
public
constructor Create(ErrorNum: Integer)
end;
EInValidation增加了一個公有成員ErrorCode來保存錯誤代碼
從以上定義可以發現
constructor EInValidation
begin
inherited Create(Msg)
ErrorCode := ErrorNum;
end;
constructor EInValidPassWord
begin
inherited Create(
end;
constructor EInValidInput
var
Msg: String;
begin
case ErrorNum of
Msg :=
Msg :=
else
Msg :=
end;
inherited Create(Msg
end;
對於EInvalidInput
[
From:http://tw.wingwit.com/Article/program/Delphi/201311/25189.html