0

C# で最初のいくつかのカスタム例外を作成しようとしていますが、MSDN の記事と、同じものが複数ある理由をよく理解していません。

 public class CustomException : Exception
 {     
     public CustomException(): base() { }

     public CustomException(some message): base() { }
 }

などなど

私がやりたいことは、次のようなものです

 public class CustomException : Exception
 {     
     public AlreadySentException() : base () { }

     public InvalidMessageException() : base() { }
 }

これらの例外を呼び出せるようにしたいだけです。

これを実装する方法に関するアイデア/推奨事項は大歓迎です。

ありがとう

4

3 に答える 3

8

さまざまな例外クラスを定義します。そのような単純な!

    [Serializable]
    public class CustomException : Exception
    {
        public CustomException() { }
        public CustomException(string message) : base(message) { }
        public CustomException(string message, Exception inner) : base(message, inner) { }
        protected CustomException(
          System.Runtime.Serialization.SerializationInfo info,
          System.Runtime.Serialization.StreamingContext context)
            : base(info, context) { }
    }

    [Serializable]
    public class AlreadySentException : CustomException
    {
        public AlreadySentException() { }
        public AlreadySentException(string message) : base(message) { }
        public AlreadySentException(string message, Exception inner) : base(message, inner) { }
        protected AlreadySentException(
          System.Runtime.Serialization.SerializationInfo info,
          System.Runtime.Serialization.StreamingContext context)
            : base(info, context) { }
    }

    [Serializable]
    public class InvalidMessageException : CustomException
    {
        public InvalidMessageException() { }
        public InvalidMessageException(string message) : base(message) { }
        public InvalidMessageException(string message, Exception inner) : base(message, inner) { }
        protected InvalidMessageException(
          System.Runtime.Serialization.SerializationInfo info,
          System.Runtime.Serialization.StreamingContext context)
            : base(info, context) { }
    }
于 2013-06-13T21:28:46.897 に答える
1

例外は、基本クラスから派生した単なるクラスExceptionです。

public class CustomException(): base()
{
}

public class CustomException(some message): base()
{
}

これは有効な C# コードではありません。しかし、それらはコンストラクターのように見えます:

public CustomException(): base()
{
}

public CustomException(some message): base()
{
}

これらは、1 つのCustomExceptionクラスに対する異なるコンストラクターです。メッセージを含めるかどうかに応じて、これらのいずれかを使用してクラスを構築します。しかし、どちらも同じ例外になります。

必要な例外を定義するには、次からそれぞれを派生させますException

public class AlreadySentException : Exception { }

public class InvalidMessageException : Exception { }

クラスの継承に慣れていない場合は、最初にそれをブラッシュアップすることをお勧めします。

于 2013-06-13T21:33:18.697 に答える
1
public CustomException(): base()
{
}

public CustomException(some message): base()
{
}

これらはオーバーロードされたコンストラクターであり、同じオブジェクトを参照します。new CustomException() または CustomException("some string") を呼び出して、CustomException クラスをインスタンス化できます。

必要なのは、次のようなさまざまなクラスです。

public class AlreadySentException : Exception
{
}

public class InvalidMessageException: Exception
{
}

これらのクラスでもオーバーロードを使用できます。デフォルトのメッセージまたはカスタムのメッセージが必要だとしましょう。これを行うことができます:

public class AlreadySentException : Exception
{
    public AlreadySentException() : base("Already sent"){}
    public AlreadySentException(string message) : base(message){}
}

Message プロパティを設定する、オーバーロードされたバージョンの Exception 基本クラスが呼び出されます。

于 2013-06-13T21:34:02.017 に答える