|
通用語言運行時(CLR)具有的一個很大的優(yōu)勢,異常處理是跨語言被標(biāo)準(zhǔn)化的。一個在C#中所引發(fā)的異常可以在Visual Basic客戶中得到處理。不再有 HRESULTs 或者 ISupportErrorInfo 接口。
盡管跨語言異常處理的覆蓋面很廣,你稍為改變編譯器的溢出處理行為,接著有趣的事情就開始了:你處理了該異常。要增加更多的手段,隨后引發(fā)你所創(chuàng)建的異常。
1.1 校驗(checked)和非校驗(unchecked)語句
當(dāng)你執(zhí)行運算時,有可能會發(fā)生計算結(jié)果超出結(jié)果變量數(shù)據(jù)類型的有效范圍。這種情況被稱為溢出,依據(jù)不同的編程語言,你將被以某種方式通知——或者根本就沒有被通知。
那么,C#如何處理溢出的呢? 要找出其默認(rèn)行為,請看下面的階乘的例子。
example 1.1 計算一個數(shù)的階乘

1.3 引發(fā)異常
當(dāng)你必須捕獲異常時,其他人首先必須首先能夠引發(fā)異常。而且,不僅其他人能夠引發(fā),你也可以負(fù)責(zé)引發(fā)。其相當(dāng)
簡單:
throw new ArgumentException("Argument can't be 5");
你所需要的是throw 語句和一個適當(dāng)?shù)漠惓n悺N乙呀?jīng)從表7.1提供的清單中選出一個異常給這個例子。
Runtime提供的標(biāo)準(zhǔn)異常
異常類型 描述
Exception 所有異常對象的基類
SystemException 運行時產(chǎn)生的所有錯誤的基類
IndexOutOfRangeException 當(dāng)一個數(shù)組的下標(biāo)超出范圍時運行時引發(fā)
NullReferenceException 當(dāng)一個空對象被引用時運行時引發(fā)
InvalidOperationException 當(dāng)對方法的調(diào)用對對象的當(dāng)前狀態(tài)無效時,由某些方法引發(fā)
ArgumentException 所有參數(shù)異常的基類
ArgumentNullException 在參數(shù)為空(不允許)的情況下,由方法引發(fā)
ArgumentOutOfRangeException 當(dāng)參數(shù)不在一個給定范圍之內(nèi)時,由方法引發(fā)
InteropException 目標(biāo)在或發(fā)生在CLR外面環(huán)境中的異常的基類
ComException 包含COM 類的HRESULT信息的異常
SEHException 封裝win32 結(jié)構(gòu)異常處理信息的異常
然而,在catch語句的內(nèi)部,你已經(jīng)有了隨意處置的異常,就不必創(chuàng)建一個新異常。可能在上面的異常沒有一個符
合你特殊的要求——為什么不創(chuàng)建一個新的異常?
1.3.1 重新引發(fā)異常
當(dāng)處于一個catch 語句的內(nèi)部時,你可能決定引發(fā)一個目前正在再度處理的異常,留下進一步的處理給一些外部的
try-catch 語句。該方法的例子如 example 1.8所示。
example 1.8 重新引發(fā)一個異常

NET技術(shù):C#中的異常處理,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。