try-finally (C# リファレンス)
更新 : 2010 年 5 月
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;
Console.WriteLine("WriteLine at the end of the try block.");
}
finally
{
// To run the program in Visual Studio, type CTRL+F5. Then
// click Cancel in the error dialog.
Console.WriteLine("\nThe finally block is executed, even though"
+ " an error was caught in the try block.");
Console.WriteLine("i = {0}", i);
}
}
// Output:
// Unhandled Exception: System.InvalidCastException: Specified cast is not valid.
// at ValueEquality.ThrowTest.Main() in c:\users\sahnnyj\documents\visual studio
// 2010\Projects\ConsoleApplication9\Program.cs:line 21
//
// The finally block is executed, even though an error was caught in the try block.
// i = 123
}
上の例では、System.InvalidCastException がスローされます。
例外はキャッチされますが、finally ブロックに含まれる出力ステートメントはそのまま実行され、次のようになります。
i = 123
finally の詳細については、「try-catch-finally」を参照してください。
C# には、便利な構文で try-finally ステートメントとまったく同じ機能を利用できる、using ステートメントが用意されています。
C# 言語仕様
詳細については、「C# 言語仕様」を参照してください。 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。
参照
処理手順
参照
try, catch, and throw Statements (C++)
概念
その他の技術情報
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
2010 年 5 月 |
結果を明確にするため、例に書き込みステートメントと説明を追加。 |
カスタマー フィードバック |