異常是一種的報告錯誤的機制,它可以在遠離錯誤發生的地方進行處理錯誤。所有關於錯誤發生的的信息必須包含在異常對象中。在錯誤發生的過程中,你 可能想把底層的錯誤轉化成詳細的應用程序錯誤,而且不丟失關於錯誤的任何信 息。你須要仔細考慮關於如何在C#應用程序中創建特殊的異常類。第一步就是 要理解什麼時候以及為什麼要創建新的異常類,以及如何構造繼承的異常信息。當開發者使用你的庫來寫catch語句時,他們是基於特殊的進行時異常在區別為 同的行為的。每一個不同的異常類可以有不同的處理要完成:
try {
Foo( );
Bar( );
} catch( MyFirstApplicationException e1 )
{
FixProblem( e1 );
} catch( AnotherApplicationException e2 )
{
ReportErrorAndContinue( e2 );
} catch( YetAnotherApplicationException e3 )
{
ReportErrorAndShutdown( e3 );
} catch( Exception e )
{
ReportGenericError( e );
}
finally
{
CleanupResources( );
}
不同的catch語句可以因為不同的 運行時異常而存在。你,做為庫的作者,當異常的catch語句要處理不同的事情 時,必須創建或者使用不同的異常類。如果不這樣,你的用戶就只有唯一一個無 聊的選擇。在任何一個異常拋出時,你可以掛起或者中止應用程序。這當然是最 少的工作,但樣是不可能從用戶那裡贏得聲望的。或者,他們 可以取得異常, 然後試著斷定這個錯誤是否可以修正:
try {
Foo( );
Bar( );
} catch( Exception e )
{
switch( e.TargetSite.Name )
{
case "Foo":
FixProblem( e );
break;
case "Bar":
ReportErrorAndContinue( e );
break;
// some routine called by Foo or Bar:
default:
ReportErrorAndShutdown( e );
break;
}
} finally
{
CleanupResources( );
}