C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#における例外の伝播(Exception Propagation)の仕組みを解説

C#の例外処理の仕組みを理解すると、「例外の伝播」についても自然に把握できるようになります。

tryブロック内で例外が発生すると、まず対応するcatchブロックがその例外を捕捉できるかどうかが順番にチェックされます。もし一致するcatchブロックが見つからなければ、例外はより上位の階層にあるtryブロックへと伝播していきます。この処理は、例外がいずれかのcatchブロックで捕捉されるまで繰り返されます。そして最後まで例外が捕捉されなかった場合、プログラムの実行はそこで終了します。

以下の例では、ネストされた(入れ子になった)try文を使って、この例外の伝播の概念をわかりやすく説明しています。

サンプルコード

using System;
using System.Text;
public class Demo {
    public static void Main() {
        try {
            try {
                throw new ArgumentException();
            } catch (NullReferenceException e) {
                Console.WriteLine("catch one");
            } finally {
                Console.WriteLine("finally one");
            }
        } catch (Exception e) {
            Console.WriteLine("catch two");
        } finally {
            Console.WriteLine("finally two");
        }
        Console.ReadLine();
    }
}

実行結果

finally one
catch two
finally two

このコードでは、内側のtryブロックでArgumentExceptionがスローされますが、内側のcatchブロックはNullReferenceExceptionしか捕捉できないため、例外は外側のtryブロックへと伝播します。そして、外側のcatch(Exception e)ブロックによって「catch two」と表示され、各finallyブロックも順番に実行されていることが出力結果から確認できます。
このように、catchできない例外は上位の呼び出し元へ次々と伝わり、どこでも処理されなければプログラムが異常終了するというのが、C#における例外の伝播の基本的な動作です。

  1. JSPで例外を処理する方法:c:catchタグの使い方を徹底解説

    JSPアプリケーションを開発していると、実行時エラー(例外)が発生することがあります。JSTL(JSP Standard Tag Library)には、こうした例外を安全に捕捉するための<c:catch>タグが用意されています。このタグは、タグの本文内で発生したあらゆるThrowableオブジェクトを捕捉し、指定した変数に格納することができます。これにより、ページ全体がクラッシュするのを防ぎ、ユーザーにとって分かりやすい形でエラー処理を行うことが可能になります。c:catchタグの属性<c:catch>タグには以下の属性があります。属性説明必須デフォルト値var本文内の

  2. C++の例外処理入門!try・catch・throwの基本と標準例外クラス一覧

    C++における例外処理(Exception Handling)とは、プログラムの実行時に発生するエラー(ランタイムエラー)を適切に扱うための仕組みです。例外とは、実行時に送出(スロー)されるイベントのことで、C++ではすべての標準例外が std::exception クラスから派生しています。もし例外を捕捉しなかった場合、例外メッセージが出力され、プログラムは強制終了してしまいます。 C++標準では、例外関連のクラスが <exception> ヘッダに定義されており、プログラムの中で自由に利用できます。親子関係によるクラス階層は次のようになっています。 C++の主な標準例外クラス