カテゴリ: C# 更新日: 2026/01/22

C#のfinally節の使い方!後片付け処理の役割を理解しよう

C#のfinally節の使い方!後片付け処理の役割を理解しよう
C#のfinally節の使い方!後片付け処理の役割を理解しよう

先生と生徒の会話形式で理解しよう

生徒

「C#でエラーが起きたときに後片付けってどうやるんですか?」

先生

「C#にはtrycatchfinallyという仕組みがあり、その中でfinallyを使うと後片付け処理を必ず実行できますよ。」

生徒

「必ず実行されるってどういう意味ですか?」

先生

「エラーがあってもなくても、最後にやらないといけない処理をfinallyに書くんです。例えば、開いたファイルを閉じる、接続したデータベースを切断する、みたいな作業ですね。」

1. finally節とは?

1. finally節とは?
1. finally節とは?

C#のfinally節は、プログラムの実行中に必ず最後に実行される処理を記述するための部分です。通常、プログラムではエラーが起きたらcatchでエラー処理を行いますが、後片付けのような「絶対にやらなければいけない作業」は、エラーがあってもなくても実行する必要があります。そのときに役立つのがfinally節です。

例えば、料理をするときに「包丁やまな板を洗う」作業は、料理が成功しても失敗しても必ず必要になりますよね。この「最後に必ずやる作業」をプログラムで表現するのがfinallyです。

2. 基本的な構文

2. 基本的な構文
2. 基本的な構文

まずは、C#でのtrycatchfinallyの基本構文を見てみましょう。


try
{
    // エラーが発生するかもしれない処理
}
catch (Exception ex)
{
    // エラーが発生したときの処理
}
finally
{
    // 必ず実行される後片付け処理
}

このように、finally節はtrycatchとセットで使われます。エラーがあってもなくても、最後に必ず実行されるという特徴があります。

3. 簡単なサンプルコード

3. 簡単なサンプルコード
3. 簡単なサンプルコード

実際の例を見てみましょう。ここでは、数字を割り算する処理をして、その後に必ず「処理が終了しました」と表示するサンプルです。


try
{
    int x = 10;
    int y = 0; // 0で割ろうとするのでエラー発生
    int result = x / y;
    Console.WriteLine("計算結果: " + result);
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("エラー: 0で割ることはできません。");
}
finally
{
    Console.WriteLine("後片付け処理: プログラムを終了します。");
}

実行結果は次のようになります。


エラー: 0で割ることはできません。
後片付け処理: プログラムを終了します。

このように、割り算でエラーが発生しても、最後にfinallyの内容が必ず実行されるのが分かります。

4. finally節が活躍する場面

4. finally節が活躍する場面
4. finally節が活躍する場面

finally節は、特に「リソースの解放」や「後始末」に役立ちます。リソースとは、プログラムが使っているファイルやデータベース、ネットワーク接続などのことを指します。これらを使いっぱなしにすると、パソコンのメモリや処理能力に悪影響が出ることがあります。

  • ファイルを開いたら、最後に必ず閉じる
  • データベースに接続したら、最後に必ず切断する
  • ネットワーク接続を確立したら、最後に必ず解放する

これらは、エラーが発生しても必ず実行すべき作業です。だからこそ、finallyが必要になります。

5. ファイル操作での例

5. ファイル操作での例
5. ファイル操作での例

最後に、ファイルを開いて読み込む例を見てみましょう。


System.IO.StreamReader reader = null;
try
{
    reader = new System.IO.StreamReader("sample.txt");
    string content = reader.ReadToEnd();
    Console.WriteLine(content);
}
catch (Exception ex)
{
    Console.WriteLine("エラー: ファイルを読み込めませんでした。");
}
finally
{
    if (reader != null)
    {
        reader.Close(); // ファイルを必ず閉じる
        Console.WriteLine("ファイルを閉じました。");
    }
}

このコードでは、ファイルの読み込みが成功しても失敗しても、最後に必ずファイルを閉じる処理が実行されます。これによって、ファイルが開きっぱなしにならず、パソコンのリソースを正しく解放できます。

まとめ

まとめ
まとめ

C#でプログラムを書くうえで、例外処理はとても重要な考え方です。なぜなら、ユーザーが入力を間違えたり、ファイルが見つからなかったり、予期せぬ問題が起きることが現実のアプリケーションではよくあるからです。そんなとき、プログラムが途中で止まってしまわないように、trycatchでエラーに対応するのは基本中の基本です。

しかし、実務ではエラー対応だけでなく、「後片付け」も非常に重要です。ファイルやデータベース接続を開いたまま放置してしまうと、パソコンの動作が遅くなったり、アプリケーションがクラッシュしたりする原因になります。

そのときに使えるのがfinallyです。finallyは、エラーが起きても起きなくても、必ず最後に実行されるという特別な役割を持っており、プログラムの「お片付け係」のような存在です。とくにファイルを閉じる処理や接続を切る処理など、「やり忘れたら困ること」をfinallyに書いておくことで、安全で信頼性の高いアプリケーションを作ることができます。

よくあるfinallyの活用パターン

プログラムでは、次のような場面でfinallyを活用するのが一般的です。

  • 開いたファイルを必ず閉じる
  • 確立したネットワーク接続を必ず切断する
  • ロックされたリソースを必ず解放する

こうした作業は、プログラムが正常に動作しているときだけでなく、何かエラーが起きたときでも忘れずに実行される必要があります。だからこそ、finallyの存在がとても大きいのです。

再確認!finallyの書き方

最後に、実際のコードで復習しておきましょう。以下はファイルを読み込み、必ず最後に閉じる例です。


System.IO.StreamReader reader = null;
try
{
    reader = new System.IO.StreamReader("sample.txt");
    string content = reader.ReadToEnd();
    Console.WriteLine(content);
}
catch (Exception ex)
{
    Console.WriteLine("エラー: ファイルの読み込み中に問題が発生しました。");
}
finally
{
    if (reader != null)
    {
        reader.Close(); // 必ず閉じる処理
        Console.WriteLine("ファイルを閉じました。");
    }
}

このようにfinallyを使えば、例外の有無に関わらず安全にリソースを解放できます。実務で扱うファイル、接続、メモリ、どれもが大切なリソースです。finallyでしっかりと管理することが、プロとしての開発スキルにつながります。

先生と生徒の振り返り会話

生徒

「なるほど、finallyってただのおまけじゃなくて、すごく大事な役割があるんですね!」

先生

「そうです。開いたファイルを閉じ忘れたら、他のアプリが使えなくなったりすることもあります。だから、必ずやるべき処理はfinallyに書いておくのが正解です。」

生徒

「例外が起きても起きなくても、ちゃんと後片付けしてくれるって安心ですね。」

先生

「その通り。特に実務ではリソース管理が非常に大切になるので、finallyを上手に活用できると、エンジニアとしての信頼も上がりますよ。」

生徒

「今日の内容、すごく実用的で勉強になりました!これからは例外処理と一緒にfinallyも忘れずに使います!」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

C#のfinally節とは何ですか?初心者にもわかるように教えてください。

C#のfinally節とは、エラーが発生しても発生しなくても、必ず最後に実行される処理を記述する部分です。ファイルの後片付けや、データベース接続の切断など、やり忘れてはいけない重要な処理を安全に行うために使います。
カテゴリの一覧へ
新着記事
New1
C#
C#でループの中に条件分岐を書く方法!入れ子制御構造の基本
New2
C#
C#のthrow文の基本!例外を自分で発生させる方法
New3
C#
C#のADO.NETの基礎!SqlConnectionとSqlCommandの使い方を初心者向けに徹底解説
New4
C#
C#の例外クラス階層を理解しよう!Exception・SystemExceptionの基本をやさしく解説
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.3
Java&Spring記事人気No3
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.4
Java&Spring記事人気No4
C#
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.5
Java&Spring記事人気No5
COBOL
COBOLのコンパイラと開発環境を徹底解説!初心者にもわかりやすい入門ガイド
No.6
Java&Spring記事人気No6
COBOL
COBOLの帳票レイアウトを美しく!可読性向上テクニックを徹底解説
No.7
Java&Spring記事人気No7
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.8
Java&Spring記事人気No8
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説