例外狀況階層架構
例外狀況的類型有兩種:正在執行之程式所產生的例外狀況,以及 Common Language Runtime 所產生的例外狀況。此外,還有例外狀況的階層架構,可以為應用程式或者執行階段所擲回。
Exception 為例外狀況的基底類別。許多例外狀況類別直接繼承自 Exception,包括 ApplicationException 和 SystemException。這兩個類別形成幾乎所有執行階段例外狀況的基礎。
大部分直接衍生自 Exception 的例外狀況並沒有加入功能至 Exception 類別。例如,InvalidCastException 類別階層架構如下:
Object Exception SystemException InvalidCastException
執行階段會在錯誤發生時擲回 SystemException 的適當衍生類別。這些錯誤起因於失敗的執行階段檢查 (例如陣列超出界限的錯誤),並且會在任一方法的執行時發生。如果您正在設計建立新例外狀況的應用程式,應從 Exception 類別衍生這些例外狀況。建議您不要攔截 SystemException,而且在應用程式中擲回 SystemException 也不是一個好的程式設計例子。
最嚴重的例外狀況就是那些遭執行階段擲回或處於無法復原的情況,包括 ExecutionEngineException、StackOverflowException 和 OutOfMemoryException。
互通性例外狀況衍生自 SystemException,並進一步為 ExternalException 所擴充。例如,COMException 是 COM Interop 作業期間擲回的例外狀況,並衍生自 ExternalException。Win32Exception 和 SEHException 也衍生自 ExternalException。
執行階段例外狀況的階層架構
執行階段具有例外狀況的基底集合,衍生自執行個別指令時擲回的 SystemException。下表階層式列出執行階段提供的標準例外狀況,和在哪些情況下您應該建立衍生類別。
例外狀況類型 | 基底型別 | 說明 | 範例 |
---|---|---|---|
Object |
適用於所有例外狀況的基底類別。 |
無 (使用這個例外狀況的衍生類別)。 |
|
Exception |
適用於所有執行階段所產生錯誤的基底類別。 |
無 (使用這個例外狀況的衍生類別)。 |
|
SystemException |
只有當陣列索引不正確時,才由執行階段擲回。 |
在陣列有效範圍之外對它進行索引:
|
|
SystemException |
只有當參考 Null 物件時,才由執行階段擲回。 |
|
|
只有在存取無效的記憶體時,才由執行階段擲回。 |
當與 Unmanaged 程式碼或不安全的 Managed 程式碼交互操作,且使用無效的指標時發生。 |
||
SystemException |
當處於無效狀態時,由方法擲回。 |
在從基礎集合將 |
|
SystemException |
適用於所有引數例外狀況的基底類別。 |
無 (使用這個例外狀況的衍生類別)。 |
|
ArgumentException |
由不允許引數為 Null 的方法擲回。 |
|
|
ArgumentException |
由驗證引數是在指定範圍內的方法擲回。 |
|
|
SystemException |
發生的或以執行階段外部環境為目標的例外狀況的基底類別。 |
無 (使用這個例外狀況的衍生類別)。 |
|
ExternalException |
封裝 COM HRESULT 資訊的例外狀況。 |
用於 COM Interop。 |
|
ExternalException |
封裝 Win32 結構化例外處理 (Structured Exception Handling) 資訊的例外狀況。 |
用於 Unmanaged 程式碼 Interop。 |
請參閱
概念
Exception 類別和屬性
例外狀況概觀
處理例外狀況的最佳作法