.NET ソリューションで例外クラスを作成するときのベスト プラクティスは何System.Exception
ですかSystem.ApplicationException
。
5 に答える
フレームワーク設計ガイドラインの本のジェフリー・リヒターによると:
System.ApplicationException
.NETFrameworkの一部であってはならないクラスです。
これは、「すべての」アプリケーション例外をキャッチできる可能性があるという意味で意図されていましたが、パターンに従わなかったため、価値がありません。
からカスタム例外を派生させる必要がありますSystem.Exception
。
MSDNでさえ無視するようになりましたApplicationException
:
独自の例外を作成する必要があるアプリケーションを設計している場合は、Exception クラスからカスタム例外を派生させることをお勧めします。当初、カスタム例外は ApplicationException クラスから派生する必要があると考えられていました。ただし、実際には、これが重要な価値を追加することはわかっていません。詳細については、「例外処理のベスト プラクティス」を参照してください。
http://msdn.microsoft.com/en-us/library/system.applicationexception.aspx
ApplicationException
役に立たないと見なされるのは、に対する強力で批判的な議論ApplicationException
です。
結論:使用しないでください。から派生しException
ます。
フレームワークの作成者自身は、ApplicationExceptionを無価値と見なしています。
ここで素晴らしいフォローアップがあります:
疑問がある場合は、彼らの著書「フレームワーク設計ガイドライン」に従います。
http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756
ブログ投稿のトピックについては、そこでさらに説明されています。
rp
私は慣れています:
private void buttonFoo_Click()
{
try
{
foo();
}
catch(ApplicationException ex)
{
Log.UserWarning(ex);
MessageVox.Show(ex.Message);
}
catch(Exception ex)
{
Log.CodeError(ex);
MessageBox.Show("Internal error.");
}
}
次の違いを行うことができます。
- 修復しなければならない C# コード システム エラー。
- 私からの修正を必要としない「通常の」ユーザー エラー。
ApplicationException の使用が推奨されないことはわかっていますが、ApplicationException パターンを尊重しないクラスはほとんどないため、うまく機能します。