【C#】クラスのコンストラクタとデストラクタについて詳しく解説

C#プログラミングにおいて、クラスのコンストラクタとデストラクタは非常に重要な役割を担っています。

初心者の方でも理解しやすいよう、本記事ではクラスのコンストラクタとデストラクタについて、サンプルコードを交えながら解説していきます。

目次

コンストラクタとは

C#において、コンストラクタはオブジェクトが生成された際に自動的に呼び出されるメソッドです。

コンストラクタは、オブジェクトの初期化を行うために使用されます。

デフォルトコンストラクタ

デフォルトコンストラクタとは、引数を持たないコンストラクタのことです。

以下のように定義します。

public class MyClass
{
    public MyClass()
    {
        // 初期化処理
    }
}

このように定義することで、MyClassオブジェクトが生成された際に自動的にデフォルトコンストラクタが呼び出されます。

パラメータ付きコンストラクタ

パラメータ付きコンストラクタとは、引数を持つコンストラクタのことです。

以下のように定義します。

public class MyClass
{
    public MyClass(int value)
    {
        // 引数valueを使った初期化処理
    }
}

このように定義することで、MyClassオブジェクトが生成された際に自動的にパラメータ付きコンストラクタが呼び出されます。

例えば、以下のような方法でMyClassオブジェクトを生成することができます。

MyClass myObject = new MyClass(10);

コンストラクタのオーバーロード

C#では、同じ名前のメソッドやコンストラクタを複数定義することができます。

これを「オーバーロード」と呼びます。

同様に、複数のパラメータ付きコンストラクタを定義することも可能です。

public class MyClass
{
    public MyClass()
    {
        // 初期化処理1
    }

    public MyClass(int value)
    {
        // 引数valueを使った初期化処理2
    }

    public MyClass(string name)
    {
        // 引数nameを使った初期化処理3
    }
}

このような場合、引数の型や個数から適切なコンストラクタが自動的に選択されます。

例えば、

MyClass myObject1 = new MyClass();
MyClass myObject2 = new MyClass(10);
MyClass myObject3 = new MyClass("test");

上記のような方法でそれぞれ異なるコンストラクタが呼び出されます。

以上がC#プログラミング言語で使用される「コンストラクタ」に関する解説です。

デストラクタとは

デストラクタとは、オブジェクトが破棄される際に自動的に呼び出されるメソッドのことです。

C#では、デストラクタは~で始まるクラスと同じ名前を持ちます。

デストラクタの基本

デストラクタは、オブジェクトが破棄される際に自動的に呼び出されます。

C#では、デストラクタは以下のように定義します。

class MyClass
{
    ~MyClass()
    {
        // デストラクタの処理
    }
}

デストラクタの使い方

デストラクタは、オブジェクトが破棄される際に必要な後処理を行うために使用します。

例えば、ファイルやネットワーク接続などのリソースを解放する場合に使用します。

以下は、ファイルを開いている間だけ有効な File クラスを実装した例です。

class File : IDisposable
{
    private FileStream _stream;
    //コンストラクタでファイルを開く
    public File(string path)
    {
        _stream = new FileStream(path, FileMode.Open);
    }
    //デストラクタで呼ばれる、ファイルを解放するメソッド
    public void Dispose()
    {
        if (_stream != null)
        {
            _stream.Dispose();
            _stream = null;
        }
    }
    //オブジェクト破棄時に呼ばれる
    ~File()
    {
        Dispose();
    }
}

この例では、Dispose() メソッドで _stream を解放しています。

そして、~File()Dispose() を呼び出すことで、オブジェクトが破棄された際に _stream を解放するようにしています。

デストラクタの注意点

デストラクタは自動的に呼び出されるため、明示的な呼び出しは不要です。

ただし、デストラクタ内で大量の処理を行うとパフォーマンス上の問題が発生する可能性があるため、オブジェクトは記事に必要な最小限の処理しか行わないように注意する必要があります。

目次