標準例外型の使用

Note

このコンテンツは、Pearson Education, Inc. の許可を得て、『Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition (フレームワーク設計ガイドライン: 再利用可能な .NET ライブラリの規約、表現形式、およびパターン、第 2 版)』から転載されています。 この版は 2008 年に出版され、その後、この本は第 3 版で全面的に改訂されました。 このページの情報の一部は古くなっている可能性があります。

このセクションでは、フレームワークによって提供される標準例外とその使用法の詳細について説明します。 このリストは完全なものではありません。 他のフレームワーク例外型の使用方法については、.NET Framework リファレンス ドキュメントを参照してください。

例外と SystemException

System.Exception または System.SystemException をスローしないでください。

❌ 再スローする場合を除き、フレームワーク コード内で System.Exception または System.SystemException をキャッチしないでください。

❌ 最上位レベルの例外ハンドラー内の場合を除き、System.Exception または System.SystemException をキャッチすることは避けてください。

ApplicationException

ApplicationException をスローしたり、そこから派生させたりしないでください。

InvalidOperationException

✔️ オブジェクトが不適切な状態にある場合は、InvalidOperationException をスローしてください。

ArgumentException、ArgumentNullException、ArgumentOutOfRangeException

✔️ 無効な引数がメンバーに渡された場合は、ArgumentException またはそのサブタイプの 1 つをスローしてください。 最も多く派生した例外型を優先します (該当する場合)。

✔️ ArgumentException のサブクラスの 1 つをスローするときは、ParamName プロパティを設定してください。

このプロパティは、例外がスローされる原因となったパラメーターの名前を表します。 プロパティは、コンストラクターのオーバーロードの 1 つを使用して設定できることに注意してください。

✔️ プロパティ セッターの暗黙的な値パラメーターの名前には value を使用してください。

NullReferenceException、IndexOutOfRangeException、AccessViolationException

❌ パブリックに呼び出し可能な API が NullReferenceExceptionAccessViolationException、または IndexOutOfRangeException を明示的または暗黙的にスローすることを許可しないでください。 これらの例外は、実行エンジンによって予約およびスローされるもので、ほとんどの場合にバグを示します。

これらの例外をスローしないように引数をチェックしてください。 これらの例外をスローすると、時間の経過と共に変化する可能性のあるメソッドの実装の詳細が公開されます。

StackOverflowException

StackOverflowException を明示的にスローしないでください。 例外は、CLR によってのみ明示的にスローされる必要があります。

StackOverflowException をキャッチしないでください。

任意のスタック オーバーフローの有無に一貫性を持たせるマネージド コードを記述することはほぼ不可能です。 CLR のアンマネージド部分は、任意のスタック オーバーフローからバックアップするのではなく、プローブを使用してスタック オーバーフローを適切に定義された場所に移動することによって一貫性が保たれます。

OutOfMemoryException

OutOfMemoryException を明示的にスローしないでください。 この例外は、CLR インフラストラクチャによってのみスローされます。

ComException、SEHException、ExecutionEngineException

COMExceptionExecutionEngineExceptionSEHException を明示的にスローしないでください。 これらの例外は、CLR インフラストラクチャによってのみスローされます。

Portions © 2005, 2009 Microsoft Corporation. All rights reserved.

2008 年 10 月 22 日に Microsoft Windows Development シリーズの一部として、Addison-Wesley Professional によって発行された、Krzysztof Cwalina および Brad Abrams による「Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition」 (フレームワーク デザイン ガイドライン: 再利用可能な .NET ライブラリの規則、用法、パターン、第 2 版) から Pearson Education, Inc. の許可を得て再印刷されています。

関連項目