トラック
/
C#
C#
/
シラバス
/
ユーザー定義例外
ユー

ユーザー定義例外 の C#

1個の演習

ユーザー定義例外について

ユーザー定義の例外とは、コードの中で定義するクラスのうち、System.Exceptionから派生したもののことです。クラスの継承に関するすべてのルールに従いますが、それに加えて、コンパイラーと言語ランタイムはそのようなクラスを特別に扱います。そのおかげで、exceptions演習で説明したように、通常の制御フローの外側でもそのインスタンスをスローしたりキャッチしたりできます。ユーザー定義の例外は、ランタイムやMicrosoft Base Class Libraryの例外と同じように、あらゆる場面で使えます。

この特別な扱いは、Exceptionから派生したクラスにだけ当てはまります。ほかの型のインスタンスはスローできません。

ユーザー定義の例外は、メッセージやその他の関連データといった追加情報を運び、例外をキャッチする側で利用できるようにするためによく使われます。こうした情報は、ログに記録したり、ユーザーに伝えたり、再試行の処理に使ったりできます。System.Exceptionには、メッセージと「内部」例外を保持するための便利なデータメンバーと、適切なコンストラクターが用意されています。

慣例として、例外のクラス名は「Exception」で終わります。たとえばMyTerribleExceptionです。

ユーザー定義の例外でサードパーティの例外をラップして拡張するのはよく見られるパターンですが、一般的なアドバイスとしては、この用途以外で自分のコードの中で使いすぎないほうがよいとされています。アンチパターンと見なされているからです。ただし、この考え方には異論もあり、その議論の両論はこちらのStack Exchangeの投稿で確認できます。

こちらの記事は、ユーザー定義の例外を学ぶのによい入門記事です。

.NETチームは、例外の作成とスローに関するガイダンスの中で、ユーザー定義の例外にはいくつかの便利なコンストラクターを用意することを勧めています。ほとんどの用途では、以下に示す組み合わせが適切です。

public class IncompleteExerciseException : System.Exception
{
    public IncompleteExerciseException() : base() { }
    public IncompleteExerciseException(string message) : base(message) { }
    public IncompleteExerciseException(string message, System.Exception inner) : base(message, inner) { }
}
GitHubで編集 リンクは新しいウィンドウまたはタブで開きます

ユーザー定義例外を学習する