と言うのは、言い過ぎかも知れませんが、
エラーが起こる可能性を0(ゼロ)にすることはなかなか難しい。
エラーが発生した場合、そのエラーがなぜ発生したのかがわかると、
対処がしやすいものです。
そのため、何のエラーかを識別するために、.NET Frameworkには多くのExceptionが存在します。
しかし、これらのExceptionだけでは足らず(適切なものがなく)、
自ら定義をして例外の種類を追加したいことがあります。
このような場合、ユーザー自身がExceptionを定義することで、
より細かくエラーを識別する手助けをすることができます。
今回は例外を試すだけなので、コンソールアプリケーションで行いましょう。
("ファイル" > "新しいプロジェクト" > "コンソール アプリケーション")
例外のためのクラスを追加します。
例外を作成する場合は、クラスの最後に"Exception"と付けると、
コーディング時に便利です。
クラス名は"OriginalException"としておきましょう。
/*** OriginalException.cs ***/
public class OriginalException : Exception
{
public OriginalException() { }
public OriginalException(string message) : base(message) { }
public OriginalException(string message, Exception inner) : base(message) { }
}
このように、例外を作成する場合は必ず"Exception"クラスを継承しなくてはなりません。
また、推奨される3つのコンストラクタは実装しておくと便利です。
2つ目と3つ目のコンストラクタには、コンストラクタ宣言の後に
: base(...)
が付いています。
これは継承元クラス(baseクラス,この場合"Exception"クラス)のコンストラクタを
呼び出すことを意味しています。
通常、クラスに継承関係がある場合、継承元のコンストラクタが実行された後、
継承先のコンストラクタが実行されます。
しかし、その場合、コンストラクタの引数は継承先のコンストラクタに渡され、
継承元のコンストラクタには渡されません。
そこで、": base"を用いることで、継承元のコンストラクタへ引数を渡すことができます。
継承先のコンストラクタが実行されます。
しかし、その場合、コンストラクタの引数は継承先のコンストラクタに渡され、
継承元のコンストラクタには渡されません。
そこで、": base"を用いることで、継承元のコンストラクタへ引数を渡すことができます。
実際に作成した"OriginalException"を試してみます。
/*** Program.cs ***/
private static void ThrowTest()
{
Console.WriteLine("Enter ThrowTest method.");
throw new OriginalException("This is an OriginalException.");
Console.WriteLine("Exit ThrowTest method.");
}
[STAThread]
public static void Main()
{
ThrowTest();
}
実行しようとすると、以下のように警告されます。
到達できないコードが検出されました。
これは、例外を投げると、それ以降のコードが処理されず、
"ThrowTest"メソッドの3行目が実行されないことを意味しています。
警告を無視して実行します。
コンソールに「Enter ThrowTest method.」と表示された後、
とエラーが表示されました。
次に、Mainメソッドを変更して、例外処理を行います。
/*** Program.cs ***/
public static void Main()
{
try
{
ThrowTest();
}
catch (OriginalException e)
{
Console.WriteLine("Exception occured : " + e.Message);
}
finally
{
Thread.Sleep(5000);
}
}
実行します。
("using System.Threading;"を追加して、名前空間の修飾省略定義を
行って下さい。)
正しく例外をキャッチすることができました。
.Net Frameworkでもユーザー独自の例外を作成することができます。
ユーザー独自の例外を用いることで、よい効率的なコーディングができるように
なります。
参照:
MSDN : 方法:ユーザー定義の例外を作成する
0 件のコメント:
コメントを投稿