アプリケーションは、実行中に発生したエラーを一貫した方法で処理できる必要があります。 .NET には、アプリケーションにエラーを一様な方法で通知するためのモデルが用意されています。.NET 操作は、例外をスローすることによってエラーを示します。
例外
例外は、実行中のプログラムで発生したエラー状態または予期しない動作です。 例外は、コードまたは呼び出したコード (共有ライブラリなど)、使用できないオペレーティング システム リソース、ランタイムで発生する予期しない条件 (検証できないコードなど) が原因でスローされる可能性があります。 アプリケーションは、これらの条件の一部から回復できますが、他の条件からは回復できません。 ほとんどのアプリケーション例外から復旧できますが、ほとんどのランタイム例外から復旧することはできません。
.NET では、例外は System.Exception クラスから継承するオブジェクトです。 問題が発生したコード領域から例外がスローされます。 例外は、アプリケーションが処理するか、プログラムが終了するまでスタックに渡されます。
例外と従来のエラー処理メソッド
従来、言語のエラー処理モデルは、エラーを検出してハンドラーを検索する言語固有の方法か、オペレーティング システムによって提供されるエラー処理メカニズムに依存していました。 .NET で例外処理を実装する方法には、次の利点があります。
例外のスローと処理は、.NET プログラミング言語でも同じように動作します。
例外を処理するために特定の言語構文は必要ありませんが、各言語で独自の構文を定義できます。
例外は、プロセスやマシンの境界を越えてスローされる可能性があります。
例外処理コードをアプリケーションに追加して、プログラムの信頼性を高めることができます。
例外は、リターン コードなど、エラー通知の他の方法よりも優れた利点を提供します。 例外がスローされ、処理されない場合、ランタイムによってアプリケーションが終了されるため、エラーは気付かれません。 エラー リターン コードのチェックに失敗したコードの結果として、無効な値がシステムに伝達され続けません。
一般的な例外
次の表に、いくつかの一般的な例外と、その原因の例を示します。
例外の種類 | 説明 | 例 |
---|---|---|
Exception | すべての例外の基本クラス。 | なし (この例外の派生クラスを使用します)。 |
IndexOutOfRangeException | 配列のインデックスが正しくない場合にのみ、ランタイムによってスローされます。 | 有効な範囲外の配列のインデックス作成: arr[arr.Length+1] |
NullReferenceException | null オブジェクトが参照されている場合にのみ、ランタイムによってスローされます。 | object o = null; o.ToString(); |
InvalidOperationException | 無効な状態にある場合にメソッドによってスローされます。 | 基になるコレクションから項目を削除した後に Enumerator.MoveNext() を呼び出します。 |
ArgumentException | すべての引数例外の基底クラス。 | なし (この例外の派生クラスを使用します)。 |
ArgumentNullException | 引数を null にできないメソッドによってスローされます。 | String s = null; "Calculate".IndexOf(s); |
ArgumentOutOfRangeException | 引数が特定の範囲内にあることを確認するメソッドによってスローされます。 | String s = "string"; s.Substring(s.Length+1); |
こちらも参照ください
.NET