標準例外型の使用
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 が NullReferenceException、AccessViolationException、または IndexOutOfRangeException を明示的または暗黙的にスローすることを許可しないでください。 これらの例外は、実行エンジンによって予約およびスローされるもので、ほとんどの場合にバグを示します。
これらの例外をスローしないように引数をチェックしてください。 これらの例外をスローすると、時間の経過と共に変化する可能性のあるメソッドの実装の詳細が公開されます。
StackOverflowException
❌StackOverflowException を明示的にスローしないでください。 例外は、CLR によってのみ明示的にスローされる必要があります。
❌StackOverflowException
をキャッチしないでください。
任意のスタック オーバーフローの有無に一貫性を持たせるマネージド コードを記述することはほぼ不可能です。 CLR のアンマネージド部分は、任意のスタック オーバーフローからバックアップするのではなく、プローブを使用してスタック オーバーフローを適切に定義された場所に移動することによって一貫性が保たれます。
OutOfMemoryException
❌OutOfMemoryException を明示的にスローしないでください。 この例外は、CLR インフラストラクチャによってのみスローされます。
ComException、SEHException、ExecutionEngineException
❌COMException、ExecutionEngineException、SEHException を明示的にスローしないでください。 これらの例外は、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. の許可を得て再印刷されています。