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

C#のデストラクタとは?基本の仕組みと実装例をわかりやすく解説

デストラクタ(Destructor)とは、クラスが持つ特殊なメンバー関数の一つで、そのクラスのオブジェクトがスコープ外に出たり、破棄されたりするタイミングで自動的に実行されるものです。主に、オブジェクトが使用していたリソースを解放するために利用されます。

デストラクタの命名ルール

デストラクタの名前は、クラス名と完全に同じで、先頭にチルダ記号(~)を付けるという決まりがあります。

たとえば、クラス名が「Demo」の場合、デストラクタは「~Demo()」と記述します。

public Demo() { // コンストラクタ
    Console.WriteLine("Object is being created");
}
~Demo() { // デストラクタ
    Console.WriteLine("Object is being deleted");
}

上のコードでは、コンストラクタ「Demo()」がオブジェクト生成時に呼び出され、デストラクタ「~Demo()」がオブジェクト破棄時に呼び出されます。

C#でのデストラクタの実装例

それでは、実際にC#でデストラクタがどのように動作するのか、サンプルコードを見てみましょう。

サンプルコード

using System;

namespace LineApplication {
    class Line {
        private double length; // 線の長さ

        public Line() { // コンストラクタ
            Console.WriteLine("Object is being created");
        }

        ~Line() { // デストラクタ
            Console.WriteLine("Object is being deleted");
        }

        public void setLength( double len ) {
            length = len;
        }

        public double getLength() {
            return length;
        }

        static void Main(string[] args) {
            Line line = new Line();

            // 線の長さを設定
            line.setLength(6.0);
            Console.WriteLine("Length of line : {0}", line.getLength());
        }
    }
}

実行結果

Object is being created
Length of line : 6
Object is being deleted

実行結果の解説

このプログラムの流れは以下の通りです。

まず、new Line() によってオブジェクトが生成されると、コンストラクタが呼び出され「Object is being created」が出力されます。次に setLength(6.0) で長さを設定し、getLength() の結果として「Length of line : 6」が表示されます。

そして、Mainメソッドの終了後、オブジェクト line が参照できなくなりガベージコレクションによって破棄される際に、デストラクタが呼び出され「Object is being deleted」が出力されます。

デストラクタを使う際の注意点

C#ではメモリ管理は主にガベージコレクタ(GC)が自動的に行うため、デストラクタがいつ呼び出されるかは正確には制御できません。そのため、ファイルやデータベース接続などのアンマネージリソースを扱う場合は、IDisposable インターフェースを実装して Dispose() メソッドで明示的に解放する方法が推奨されています。デストラクタはあくまで最終的な安全網として位置づけるとよいでしょう。

  1. C#のコンストラクターとは?基本の仕組みと使い方を実例付きで解説

    C#におけるコンストラクターとは、クラスから新しいオブジェクト(インスタンス)を生成する際に、自動的に実行される特殊なメンバー関数です。オブジェクトの初期化処理を行うために使われ、C#プログラミングにおいて非常に重要な役割を担っています。コンストラクターの基本的な特徴コンストラクターには、以下のような特徴があります。クラスの新しいインスタンスが作成されるたびに自動的に呼び出される名前は必ずクラス名と完全に同じにする必要がある戻り値の型を持たない(voidも指定しない)コンストラクターの定義例コンストラクターはクラス名と同じ名前で定義します。次のように記述します。class Demo {

  2. C#の関係演算子とは?種類と使い方を実例付きで解説

    C#で2つの値を比較する際に使用するのが関係演算子です。関係演算子を使うことで、数値や変数同士の等価性・大小関係を判定し、その結果に応じてプログラムの処理を分岐させることができます。 C#の主な関係演算子一覧 演算子説明==2つのオペランドの値が等しいかどうかを調べます。等しい場合、条件式はtrueになります。!=2つのオペランドの値が等しくないかどうかを調べます。等しくない場合、条件式はtrueになります。>左オペランドの値が右オペランドの値より大きいかどうかを調べます。大きい場合、条件式はtrueになります。<左オペランドの値が右オペランドの値より小さいかどうかを調べます。小さ