C#_自作例外の書き方

Exception クラス継承し、コンストラクタを作成。

コンストラクタには複数あり、出力されるメッセージが異なる。

1) 引数なし
2) 引数が文字列
3) 引数が文字列と、発生済みを例外オブジェクト

3) は、既に発生した例外を表示することができる。tyr cathc 文の入れ子で使用。

 

ex ) 自作例外名は OriginalException

コンストラクタ

    class OriginalException : Exception
    {
        public OriginalException ( ){ }
        public OriginalException ( string message ) : base ( message ) { }
        public OriginalException ( string message,
            Exception inner ) : base ( message ) { }
    }

 

OriginalException を使う

    class XXX
    {
        public YYYY( )
        {
            try
            {
                throw new OriginalException ( );
                throw new OriginalException ( "OMG" );
            }
            catch ( OriginalException )
            {
                Debug でコンソールに↓が表示される。
                例外がスローされました: 'TestHoge.OriginalException'
                    場所 ~~ 行目
            }
            catch ( OriginalException e )
            {
                Console.WriteLine ( e.ToString() );
               
                Debug でコンソールに↓が表示される。
                例外がスローされました: 'TestHoge.OriginalException'
                TestHoge.OriginalException: OMG
                   場所 ~~ 行目
            }
        }
    }

 

「 3) 引数が文字列と、発生済みを例外オブジェクト」の使い方。略ソース。

    try
    {
        try
        {
            //A 例外発生
        }
        catch( )
        {
            //B 例外発生
        }
    }
    catch( )
    {
        //A と B の例外を表示できる
    }

 

base の意味

継承元クラスコンストラクタを呼び出すことを意味している。
( 上記の場合 Exception クラス )

通常、クラスに継承関係がある場合、
継承元のコンストラクタが実行された後、継承先のコンストラクタが実行される。
この場合、コンストラクタの引数は継承先のコンストラクタに渡され、
継承元のコンストラクタには渡されない。

そこで、base を用いることで継承元のコンストラクタへ引数を渡すことができる。

 

 

OriginalException クラスに複数の例外作りたいと思ったが、
「 throw 文によって投げられる例外は、
System.Exception クラスの派生クラスのインスタンスなので、
それ以外のクラスのインスタンスを throw することはできない
とあったので、自作したい分クラスを作成する必要があるかと。

 

こちらから。
C# ユーザー定義の例外クラスを作る | プログラミングテクニック集キヤミー
http://lassy-tech.blogspot.jp/2008/01/cexception.html
https://qiita.com/github129/items/bc81d1dbb66f4afd589e
方法 : ユーザー定義の例外を作成する | Microsoft Docs
https://qiita.com/oika/items/1f8d8e423b2d0fad6da2

 

以上。