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

C#のfinallyステートメントとは?例外処理における役割と使い方を解説

C#におけるfinallyブロックは、例外がスローされたかどうかにかかわらず、指定した一連のステートメントを必ず実行するために使用します。たとえば、ファイルを開いた場合、処理中に例外が発生してもしなくても、最終的にはファイルを閉じる必要があります。このようなリソースの解放や後始末(クリーンアップ処理)に、finallyブロックが活用されます。

エラー処理は、trycatchfinallyという3つのキーワードを組み合わせて実装します。tryブロックには例外が発生する可能性のあるコードを記述し、catchブロックで例外を捕捉して適切に処理し、finallyブロックには例外の有無に関係なく確実に実行したい後処理を記述します。

サンプルコード

次のコードを実行すると、finallyステートメントの動作を確認できます。ここでは、0による除算を試みて意図的に例外を発生させています。

using System;

namespace ErrorHandlingApplication {
    class DivNumbers {
        int result;

        DivNumbers() {
            result = 0;
        }

        public void division(int num1, int num2) {
            try {
                result = num1 / num2;
            } catch (DivideByZeroException e) {
                Console.WriteLine("Exception caught: {0}", e);
            } finally {
                Console.WriteLine("Result: {0}", result);
            }
        }

        static void Main(string[] args) {
            DivNumbers d = new DivNumbers();
            d.division(25, 0);
            Console.ReadKey();
        }
    }
}

実行結果

Exception caught: System.DivideByZeroException: Attempted to divide by zero.
Result: 0

この例では、d.division(25, 0)の呼び出しによって0除算の例外(DivideByZeroException)が発生しますが、catchブロックで捕捉されるため、プログラムは異常終了せずに処理を続行します。その後、例外の有無にかかわらずfinallyブロックが実行され、計算結果が出力されます。

このようにfinallyブロックを活用することで、「例外が発生しても必ず実行したい処理」(ファイルやデータベース接続のクローズ、ロックの解放など)を安全かつ確実に記述できます。例外処理を設計する際は、try・catch・finallyの3つのブロックの役割を正しく理解し、リソース管理を適切に行うことが重要です。

  1. C#の条件分岐(意思決定)ステートメントとは?種類と使い方を解説

    C#における条件分岐(意思決定)ステートメントとは、プログラムの実行中に特定の条件を評価・判定し、その結果に応じて処理の流れを制御するための構文です。具体的には、プログラマーが「評価・テストする1つ以上の条件」と、「条件が真(true)である場合に実行するステートメント」を指定します。さらに必要に応じて、「条件が偽(false)である場合に実行するステートメント」も指定することができます。 これにより、プログラムは状況に応じて異なる動作を選択できるようになり、柔軟で高度なロジックを実現できます。 C#の主な条件分岐ステートメントの種類 C#で使用できる代表的な条件分岐ステートメントは以下の5

  2. C#の制御ステートメントとは?if文やループ処理の基本を解説

    C#におけるプログラムの流れ(制御フロー)は、制御ステートメントによって決定されます。制御ステートメントを使いこなせるようになると、条件に応じた処理の分岐や、同じ処理の繰り返しなど、柔軟なプログラムを記述できるようになります。代表的な制御ステートメントには、以下のようなものがあります。if文if文は、ブール式(true / false を返す条件式)と、それに続く1つ以上のステートメントで構成されます。条件式が true と評価された場合にのみ、ブロック内の処理が実行されます。if(boolean_expression) {   /* ブール式が true の場合