次の方法で共有


例外のスロー

このコンテンツは、 フレームワーク設計ガイドライン (再利用可能な .NET ライブラリの規則、イディオム、パターン、第 2 版) から、Pearson Education, Inc. のアクセス許可によって再印刷されます。 そのエディションは2008年に出版され、その後 、本は第3版で完全に改訂されています。 このページの情報の一部が古くなっている可能性があります。

このセクションで説明する例外スローガイドラインでは、実行エラーの意味を適切に定義する必要があります。 実行エラーは、メンバーが行うように設計されたもの (メンバー名が意味するもの) を実行できない場合に発生します。 たとえば、 OpenFile メソッドが開いているファイル ハンドルを呼び出し元に返すことができない場合、実行エラーと見なされます。

ほとんどの開発者は、ゼロによる除算や null 参照などの使用エラーに例外を使用する作業に慣れ始めてきました。 フレームワークでは、実行エラーを含むすべてのエラー条件に例外が使用されます。

❌ エラー コードを返さないでください。

例外は、フレームワークでエラーを報告する主な手段です。

✔️ DO は、例外をスローして実行エラーを報告します。

✔️ コードでそれ以上実行しても安全でない状況が発生した場合は、例外をスローするのではなく、 System.Environment.FailFast (.NET Framework 2.0 機能) を呼び出してプロセスを終了することを検討してください。

❌ 可能であれば、通常の制御フローに例外を使用しないでください。

競合状態の可能性があるシステム障害や操作を除き、フレームワーク デザイナーは、ユーザーが例外をスローしないコードを記述できるように API を設計する必要があります。 たとえば、ユーザーが例外をスローしないコードを記述できるように、メンバーを呼び出す前に前提条件を確認する方法を提供できます。

別のメンバーの前提条件を確認するために使用されるメンバーは、多くの場合、テスターと呼ばれ、実際に作業を行うメンバーは doer と呼ばれます。

Tester-Doer パターンで許容できないパフォーマンス オーバーヘッドが発生する場合があります。 このような場合は、いわゆる Try-Parse パターンを考慮する必要があります (詳細については 、例外とパフォーマンス を参照してください)。

✔️ 例外をスローした場合のパフォーマンスへの影響を考慮してください。 1 秒あたり 100 を超えるスロー レートは、ほとんどのアプリケーションのパフォーマンスに大きく影響する可能性があります。

✔️ (システム障害ではなく) メンバー コントラクトの違反が原因でパブリックに呼び出し可能なメンバーによってスローされるすべての例外を文書化し、コントラクトの一部として扱います。

コントラクトの一部である例外は、あるバージョンから次のバージョンに変更しないでください (つまり、例外の種類を変更しないでください。また、新しい例外を追加しないでください)。

❌ 何らかのオプションに基づいてスローまたはスローできないパブリック メンバーを持つ必要はありません。

❌ 戻り値または out パラメーターとして例外を返すパブリック メンバーを含めないでください。

パブリック API から例外をスローするのではなく返すと、例外ベースのエラー報告の利点の多くが損なわれます。

✔️ 例外ビルダーメソッドを使用することを検討してください。

異なる場所から同じ例外をスローするのが一般的です。 コードの肥大化を回避するには、例外を作成し、そのプロパティを初期化するヘルパー メソッドを使用します。

また、例外をスローするメンバーはインライン化されません。 ビルダー内で throw ステートメントを移動すると、メンバーをインライン化できる場合があります。

❌ 例外フィルター ブロックから例外をスローしないでください。

例外フィルターで例外が発生すると、CLR によって例外がキャッチされ、フィルターから false が返されます。 この動作は、明示的に false を実行して返すフィルターとは区別できないため、デバッグが非常に困難です。

❌ finally ブロックから例外を明示的にスローしないようにします。 スローするメソッドを呼び出した結果として暗黙的にスローされる例外は許容されます。

Portions © 2005, 2009 Microsoft Corporation. 無断転載を禁じます。

フレームワーク設計ガイドライン:再利用可能な .NET ライブラリの規則、イディオム、パターン、Krzysztof Cwalina および Brad Abrams による第 2 版は、2008 年 10 月 22 日に Microsoft Windows 開発シリーズの一部として Addison-Wesley Professional によって公開されました。

こちらも参照ください