例外階層

例外は、実行プログラムによって生成される例外と、共通言語ランタイムによって生成される例外の 2 種類に分類されます。 また、アプリケーションまたはランタイムによってスローされる例外の階層もあります。

Exception は、例外の基本クラスです。 ApplicationExceptionSystemException などのさまざまな例外クラスが Exception から直接継承されます。 ほとんどのランタイム例外は、この 2 つのクラスに基づいて作成されます。

Exception から直接派生するほとんどの例外では、Exception クラスへ機能が追加されることはありません。 たとえば、InvalidCastException クラス階層は次のようになります。

Object    Exception       SystemException          InvalidCastException

エラーが発生すると、ランタイムは SystemException の適切な派生クラスをスローします。 このようなエラーは、ランタイム チェックのエラー (配列範囲外エラーなど) が原因で発生します。また、任意のメソッドの実行中に発生することがあります。 新しい例外を作成するアプリケーションをデザインするときには、Exception クラスから例外を派生させてください。 SystemException をキャッチすることや、アプリケーションで SystemException をスローすることはお勧めできません。

重大な例外には、ExecutionEngineExceptionStackOverflowException、および OutOfMemoryException があります。これらの例外は、ランタイムによりスローされるか、または回復不能な状況でスローされます。

相互運用例外は SystemException から派生し、ExternalException によって拡張されます。 たとえば、COMExceptionExternalException から派生した例外で、COM 相互運用操作時にスローされます。 Win32ExceptionSEHExceptionExternalException から派生します。

ランタイム例外の階層

ランタイムには、SystemException から派生した基本的な例外があります。これらの例外は、それぞれの命令の実行時にスローされます。 ランタイムの標準例外および派生クラスを作成する場合の条件を階層に基づいて次の表に示します。

例外の種類

基本型

説明

Exception

オブジェクト

すべての例外の基本クラスです。

なし (この例外の派生クラスを使用)。

SystemException

Exception

すべての実行時生成エラーの基本クラスです。

なし (この例外の派生クラスを使用)。

IndexOutOfRangeException

SystemException

配列のインデックスが誤っている場合にだけランタイムによりスローされます。

配列に対して、配列の有効範囲外のインデックスを付けた場合。

arr[arr.Length+1]

NullReferenceException

SystemException

null オブジェクトが参照された場合にだけランタイムによりスローされます。

object o = null;

o.ToString();

AccessViolationException

SystemException

無効なメモリがアクセスされた場合にだけ、ランタイムによりスローされます。

アンマネージ コードまたは安全でないマネージ コードと相互運用されていて、無効なポインターが使用された場合に発生します。

InvalidOperationException

SystemException

無効な状態の場合にメソッドによりスローされます。

基になるコレクションから Item を削除した後で、Enumerator.GetNext() を呼び出した場合。

ArgumentException

SystemException

すべての引数例外の基本クラスです。

なし (この例外の派生クラスを使用)。

ArgumentNullException

ArgumentException

null の引数を受け取らないメソッドによってスローされます。

String s = null;

"Calculate".IndexOf (s);

ArgumentOutOfRangeException

ArgumentException

引数が特定の範囲内にあることを検査するメソッドによってスローされます。

String s = "string";

s.Chars[9];

ExternalException

SystemException

ランタイム外部の環境で発生した例外、およびランタイム外部の環境を対象とした例外の基本クラスです。

なし (この例外の派生クラスを使用)。

ComException

ExternalException

COM HRESULT 情報をカプセル化する例外です。

COM 相互運用機能で使用されます。

SEHException

ExternalException

Win32 構造化例外処理情報をカプセル化する例外です。

アンマネージ コード相互運用機能で使用される場合。

参照

概念

Exception クラスとプロパティ

例外処理の実施

その他の技術情報

例外処理の基本事項

例外の処理とスロー