74

.NET ソリューションで例外クラスを作成するときのベスト プラクティスは何System.ExceptionですかSystem.ApplicationException

4

5 に答える 5

63

フレームワーク設計ガイドラインの本のジェフリー・リヒターによると:

System.ApplicationException.NETFrameworkの一部であってはならないクラスです。

これは、「すべての」アプリケーション例外をキャッチできる可能性があるという意味で意図されていましたが、パターンに従わなかったため、価値がありません。

于 2008-09-09T20:02:36.180 に答える
29

からカスタム例外を派生させる必要がありますSystem.Exception

MSDNでさえ無視するようになりましたApplicationException

独自の例外を作成する必要があるアプリケーションを設計している場合は、Exception クラスからカスタム例外を派生させることをお勧めします。当初、カスタム例外は ApplicationException クラスから派生する必要があると考えられていました。ただし、実際には、これが重要な価値を追加することはわかっていません。詳細については、「例外処理のベスト プラクティス」を参照してください。

http://msdn.microsoft.com/en-us/library/system.applicationexception.aspx

于 2009-07-06T12:12:28.513 に答える
18

ApplicationException役に立たないと見なされるのは、に対する強力で批判的な議論ApplicationExceptionです。

結論:使用しないでください。から派生しExceptionます。

于 2008-09-09T19:58:46.423 に答える
13

フレームワークの作成者自身は、ApplicationExceptionを無価値と見なしています。

https://web.archive.org/web/20190904221653/https://blogs.msdn.microsoft.com/kcwalina/2006/06/23/applicationexception-considered-useless/

ここで素晴らしいフォローアップがあります:

https://web.archive.org/web/20190828075736/https://blogs.msdn.microsoft.com/kcwalina/2006/07/05/choosing-the-right-type-of-exception-to-throw/

疑問がある場合は、彼らの著書「フレームワーク設計ガイドライン」に従います。

http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756

ブログ投稿のトピックについては、そこでさらに説明されています。

rp

于 2008-09-09T19:58:56.890 に答える
1

私は慣れています:

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 パターンを尊重しないクラスはほとんどないため、うまく機能します。

于 2009-07-06T12:07:49.053 に答える