C#で自作の例外クラスを作成する場合には、System.Exceptionクラスを継承しますが、その際、いくつかあるコンストラクタと同等の引数を持つコンストラクタを用意しなければなりません。
これらを全ていちいち書くのはかったるいので、過去に書いたソースから引っ張ってきてクラス名を入れ替えたりするわけですが。過去のソースのどのあたりかも、時間が経過すると忘れてしまいます。
というわけで、テンプレートを作っておくことにしました。
これを、オータムマガジンにメモっておけば、他にも便利に使える人がいるかもしれない、という理由でここに書いておきます。
C#で自作例外クラスを作成する場合のテンプレート §
myTemplateExceptionを自作例外名に書き直して使います。
class myTemplateException : ApplicationException
{
public myTemplateException()
{
}
public myTemplateException( string message ) : base(message)
{
}
protected myTemplateException( System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context )
: base( info, context )
{
}
public myTemplateException( string message, Exception innerException )
: base( message, innerException )
{
}
}
ちなみに、System.Runtime.Serialization.SerializationInfoと、System.Runtime.Serialization.StreamingContextは、これらの名前空間をusingで指定しないことも多いだろうということで、完全な名前で書いてあります。これらのクラスは、Mscorlib.dllに含まれるので、特に標準ではないアセンブリの参照を追加する必要はありません。
それからアプリケーション側の例外ということで、Exceptionクラスではなく、ApplicationExceptionクラスから継承しています。アプリケーション側の例外は、Exceptionクラスではなく、ApplicationExceptionクラスから継承するのが正しいやり方です。なんだか過去にExceptionクラスを継承するサンプルソースをいくつも書いているような気がするけど (汗)
気にする人がいるといけないので念のため書いておきますが、著作権などは主張しません。主張するようなものではないと思いますので、必要な人は自由に使って下さい。
VB.NET版について §
Visual Basic.NET版も、いずれ作りたいと思います。
Viusal Basic.NETプログラマを応援する熱血ライターを名乗ってしまった以上は、避けられない道ですね。