プログラムでは、System 名前空間で定義済みの、上記以外の例外クラスをスローできます。また、ApplicationException から派生させて固有の例外クラスを作成することもできます。派生クラスでは、少なくとも 4 つのコンストラクタを定義する必要があります。1 つ目は既定のコンストラクタ、2 つ目はメッセージ プロパティを設定するコンストラクタ、3 つ目は Message と InnerException の両方のプロパティを設定するコンストラクタです。そして 4 つ目のコンストラクタは、例外をシリアル化するのに使用します。新しい例外クラスは、シリアル化できるクラスにする必要があります。次に例を示します。
[Serializable()]
public class InvalidDepartmentException : System.Exception
{
public InvalidDepartmentException() { }
public InvalidDepartmentException(string message) { }
public InvalidDepartmentException(string message, System.Exception inner) { }
// Constructor needed for serialization
// when exception propagates from a remoting server to the client.
protected InvalidDepartmentException(System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context) { }
}
新しいプロパティを例外クラスに追加するのは、それらが提供するデータが例外を解決する上で有効な場合に限定する必要があります。新しいプロパティを派生例外クラスに追加した場合は、ToString() をオーバーライドして追加情報を返す必要があります。