try-finally (C# リファレンス)

更新 : 2007 年 11 月

finally ブロックは、try-catch (C# リファレンス) ブロックで割り当てられているリソースをクリーンアップする場合、および例外が発生しても実行する必要がるあるコードを実行する場合に便利です。制御は、try ブロックがどのように終了したかに関係なく、常に finally ブロックに移動します。

catch がステートメント ブロックで発生した例外を処理するのに対して、finally はその前にある try ブロックがどのように終了したかに関係なくコードのステートメント ブロックを実行することを保証します。

使用例

例外を発生させる無効な変換ステートメントの例を次に示します。プログラムを実行するとランタイム エラー メッセージが表示されますが、finally 句はそのまま実行を続け、出力を表示します。

public class ThrowTest
{
    static void Main()
    {
        int i = 123;
        string s = "Some string";
        object o = s;

        try
        {
            // Invalid conversion; o contains a string not an int
            i = (int)o;
        }
        finally
        {
            Console.Write("i = {0}", i);
        }
    }
}

上の例では、System.InvalidCastException がスローされます。

例外はキャッチされますが、finally ブロックに含まれる出力ステートメントはそのまま実行され、次のようになります。

i = 123

finally の詳細については、「try-catch-finally」を参照してください。

C# には、便利な構文で try-finally ステートメントとまったく同じ機能を利用できる、using ステートメントが用意されています。

C# 言語仕様

詳細については、「C# 言語仕様」の次のセクションを参照してください。

  • 5.3.3.14 try-finally ステートメント

  • 8.11 try ステートメント

  • 16 例外

参照

処理手順

方法 : 例外を明示的にスローする

概念

C# プログラミング ガイド

参照

C# のキーワード

The try, catch, and throw Statements

例外処理ステートメント (C# リファレンス)

throw (C# リファレンス)

try-catch (C# リファレンス)

その他の技術情報

C# リファレンス