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

C#のコンストラクタとデストラクタの違いとは?特徴とサンプルコードで徹底解説


コンストラクタ(Constructor)とは

コンストラクタは、クラスの新しいオブジェクト(インスタンス)を生成する際に自動的に実行される特殊なメンバー関数です。主にフィールドの初期化など、オブジェクトを使い始める前の準備処理を行うために使用されます。

コンストラクタには、次のような特徴があります。

  • クラス名と完全に同じ名前を持つ
  • 戻り値の型を持たない(voidも記述しない)
  • オブジェクト生成時に自動的に呼び出される

例えば、クラス「Demo」に対するコンストラクタは、次のように定義します。

class Demo {

    public Demo() {}

}

実際にコンストラクタを使用した例を見てみましょう。

サンプルコード

using System;

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

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

        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());
            Console.ReadKey();
        }
    }
}

実行結果

Object is being created
Length of line : 6

new Line() でオブジェクトを生成した瞬間にコンストラクタが実行され、「Object is being created」というメッセージが出力されていることがわかります。

デストラクタ(Destructor)とは

デストラクタは、そのクラスのオブジェクトが破棄される(スコープ外に出る・ガベージコレクタによって回収される)際に実行される特殊なメンバー関数です。リソースの解放など、後片付け処理に利用されます。

デストラクタには、次のような特徴があります。

  • クラス名の先頭にチルダ(~)を付けた名前を持つ
  • 戻り値も引数も持たない
  • オブジェクトが破棄されるときに自動的に呼び出される

例えば、クラス名が「Demo」の場合、デストラクタは次のように定義します。

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

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

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

出力の最後に「Object is being deleted」が表示されており、プログラム終了時にオブジェクトが破棄され、デストラクタが自動的に呼び出されたことが確認できます。

コンストラクタとデストラクタの違いまとめ

項目コンストラクタデストラクタ
呼び出されるタイミングオブジェクト生成時オブジェクト破棄時
名前クラス名と同じクラス名の先頭に ~ を付けたもの
引数持てる(オーバーロード可能)持てない
戻り値なしなし
主な用途フィールドの初期化などリソース解放などの後処理

このように、コンストラクタは「オブジェクトの誕生時に呼ばれる初期化用のメソッド」、デストラクタは「オブジェクトの消滅時に呼ばれる後処理用のメソッド」であり、両者は対になる存在です。なお、C#ではガベージコレクションによってメモリ管理が自動化されているため、デストラクタの出番は多くありませんが、ファイルハンドルなどのアンマネージリソースを扱う場合には重要な概念となります。

  1. Wi-Fi 6と5Gの違いとは?特徴・速度・使い分けを徹底解説

    5Gネットワークは、SNSなどでも頻繁に話題になる注目の技術です。同様に、Wi-Fi 6への期待も高まっていますが、これは5Gとはまったく異なる技術です。本記事では、Wi-Fi 6と5Gネットワークの違いをわかりやすく解説します。 Wi-Fi 6とは? Wi-Fi 6は、IEEE 802.11ax規格に基づく新しい認証プログラムです。従来のWi-Fi技術と異なる最大の特徴は、より遠い距離でも高速な接続を実現できる点にあります。複数のデバイスが同時に接続されていても安定したパフォーマンスを発揮し、電源環境に多少の問題があっても性能が低下しにくいという優れた特性を持っています。 Wi-Fi 6は

  2. Windows 10とWindows 11の違いを徹底比較!アップグレードすべきか判断するポイント

    Microsoft(マイクロソフト)は、数々の新機能と改善点を盛り込んだ最新OS「Windows 11」をリリースしました。一方で、これまで数多くのパッチやアップデートが適用されてきたWindows 10は、新しいWindows 11よりも安定したOSと言えます。Microsoftによると、Windows 10のサポートは2025年以降に終了する予定のため、Windows 11へアップグレードするか、Windows 10を使い続けるかを検討する時間は十分にあります。この記事では、Windows 10とWindows 11の性能・機能・改善点を比較し、新しいOSへ移行すべきか、それともWindo