2017-05-03 35 views
2

我需要在異常中包含錯誤代碼。在異常處設置ErrorCode

Exceptions (Delphi)

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

但我不知道如何設置錯誤代碼。 我想:

type ECustomError= class(Exception) 
     ErrorCode: Integer=129; 
    end; 

但沒有成功,我怎麼能設置錯誤代碼?

+0

您的代碼試圖將在其定義中分配一個值。當然,這不是你要找的。您需要在發生異常時分配此信息,對嗎?如果是這樣,那麼在這個異常類上實現一個構造函數,並且當你創建異常時,它會要求你傳遞這個變量。 –

+0

你想要顯示錯誤代碼還是分配給其他的東西,比如功能? –

+0

@NasreddineAbdelillahGalfout只顯示。 – strykerbits

回答

10

你不能(也不應該)在類的定義中設置它。這裏沒有關於被調用的地方和原因的背景。相反,您需要在運行時分配此異常的任何地方。

這可以通過從EInOutError派生類,並添加自定義構造函數,它做:

type 
    ECustomError = class(EInOutError) 
    public 
    constructor Create(AMsg: String; ACode: Integer); reintroduce; 
    end; 

constructor ECustomError.Create(AMsg: String; ACode: Integer); 
begin 
    inherited Create(AMsg); 
    ErrorCode := ACode; 
end; 

然後,當你拋出異常,你怎麼稱呼它是這樣的...

raise ECustomError.Create('Some error message', 129); 

你可以去遠一點,這代碼添加到您的郵件...

constructor ECustomError.Create(AMsg: String; ACode: Integer); 
begin 
    inherited CreateFmt('%s (Error Code %d)', [AMsg, ACode]); 
    ErrorCode := ACode; 
end; 
+5

另一種方法是根本不派生自定義類:'var E:EInOutError;開始E:= EInOutError.Create('some error message'); E.ErrorCode:= 129;提高E;結束;' –