例外は、発生した場所から遠く離れた場所で処理されることがある。例外オブジェクトには、エラーの発生原因に関する情報が全て含まれていなければならない。アプリケーション固有の例外を作りたくなるかもしれないが、そのためには様々な事項を考慮する必要がある。
はじめに、新しい例外を作る場合とその理由、作成方法について理解する必要がある。独自の例外クラスは、あなたのライブラリの利用者が、その例外をキャッチして特別な処理を行いたいと考えられる場合にのみ追加すべきである(たとえば、引数がnullの場合に例外を投げるだけなら、ArgumentException
で十分かもしれない)。
例外クラスの名前の末尾は「Exception」でなければならない。System.Exception
か、あるいはそれ以外の適切な例外クラスを継承すべきである。また、ベースクラスの全てのコンストラクタを引き継ぐべきである。System.Exception
をベースにした例外クラスは以下のように定義できる。
[Serializable]
public class MyException : Exception
{
// デフォルトコンストラクタ
public MyException() : base()
{
}
// メッセージ付き
public MyException(string s) : base(s)
{
}
// メッセージと内部例外
public MyException(string s, Exception e) : base(s, e)
{
}
// 入力ストリームから作成
public MyException(SerializationInfo i, StreamingContext c) : base(i, c)
{
}
}