24

例外に関する前の質問のフォローアップで、.NETでカスタム例外を作成するためのベストプラクティスは何ですか?

具体的には、System.Exception、System.ApplicationException、またはその他の基本例外から継承する必要がありますか?

4

5 に答える 5

26

C# IDE で、「例外」と入力して TAB キーを押します。これは、新しい例外タイプの作成を開始するために拡張されます。例外の実践に関するいくつかの議論へのリンクを含むコメントがあります。

個人的には、多くの小さなクラスを作成することの大ファンであり、それは例外の型にまで及びます。たとえば、Foo クラスを作成する場合、次のいずれかを選択できます。

  1. throw new Exception("Bar happened in Foo");
  2. throw new FooException("Bar happened");
  3. throw new FooBarException();

どこ

class FooException : Exception 
{
    public FooException(string message) ... 
}

class FooBarException : FooException 
{
    public FooBarException() 
        : base ("Bar happened") 
    {
    }
}

私は 3 番目のオプションを好みます。

于 2008-09-10T18:27:35.680 に答える
16

から継承しSystem.Exceptionます。System.ApplicationExceptionは役に立たず、設計ガイドラインには「投げたり、派生したりしないでくださいSystem.ApplicationException」と書かれています。

http://blogs.msdn.com/kcwalina/archive/2006/06/23/644822.aspxを参照してください

于 2008-09-10T17:57:04.413 に答える
5

そのためのコードスニペットがあります。それを使用してください。さらに、後でコード分析を確認してください。スニペットは、実装する必要のあるコンストラクターの1つを除外します。

于 2008-09-10T17:58:48.543 に答える
1

あらゆるレベル(カスタムの作成、スロー、キャッチ)で例外を処理するときに覚えておくべき最も重要なことは、例外は例外的な条件のみであるということです。

于 2008-09-10T17:56:36.893 に答える
1

他のすべての例外が継承される基本例外はSystem.Exceptionです。もちろん、より具体的な例外のデフォルトメッセージなどを使用する場合を除いて、これを継承する必要があります。

于 2008-09-10T17:57:31.510 に答える