1. ホーム
  2. c#

[解決済み】C#でfinallyを使用するのはなぜですか?

2022-04-13 04:50:28

質問

finallyブロックの中にあるものは、(ほぼ)常に実行されます。その中にコードを囲むか、囲まないでおくかの違いは何でしょうか?

どのように解決するのか?

finallyブロックの中のコードは、例外の有無にかかわらず実行されます。 これは、接続を閉じるなど、常に実行する必要がある特定のハウスキーピング関数に関して、非常に便利です。

さて、私は 推測 ご質問は、なぜそうする必要があるのかということですね。

try
{
    doSomething();
}
catch
{
    catchSomething();
}
finally
{
    alwaysDoThis();
}

こんなことができるようになったら

try
{
    doSomething();
}
catch
{
    catchSomething();
}

alwaysDoThis();

その答えは、多くの場合、catch文の中のコードは例外を再スローするか、現在の関数から抜け出すかのどちらかだからです。 後者の場合、catch文の中のコードがreturnを発行するか新しい例外を投げると、"alwaysDoThis();"の呼び出しは実行されません。