C# 複数のクラスに同一のインスタンスを提供する方法


概要

通信するクラスや外部リソースを操作するクラスの場合、複数のクラスから操作するときに同一のインスタンスを取得する方が都合がいいことがあります。
その際の実装の例を記載しておきます。

コード

public class UniqueClass
{
    /// <summary>
    /// 共通のUniqueClassのインスタンス
    /// </summary>
    private static UniqueClass _instance = null;

    /// <summary>
    /// インスタンスを取得
    /// </summary>
    /// <returns></returns>
    public static UniqueClass GetInstance()
    {
        if (_instance == null)
        {
            _instance = new UniqueClass();
        }
        return _instance;
    }

    /// <summary>
    /// プライベートコンストラクタ
    /// </summary>
    private UniqueClass() { }
}

解説

上記UniqueClassのポイントは以下の3点です。

  1. staticな自分自身のインスタンス
  2. 外部にインスタンスを与えるGetInstance()メソッド
  3. プライベートコンストラクタ

1つずつ解説していきます。

1.staticな自分自身のインスタンス

これは複数のクラスに渡すためのユニークなインスタンスとなります。

2.外部にインスタンスを与えるGetInstance()メソッド

外部クラスからインスタンスを取得するための関数です。
1のインスタンスをリターンします。
※外部から呼び出す際は、

UniqueClass unique = UniqueClass.GetInstance();

のようにしてインスタンスを取得します。

3.プライベートコンストラクタ

privateで宣言されたコンストラクタです。
この宣言をすると外部からnewを使ったインスタンスを生成できなくなります。
間違ってnewを使用されたくないときに宣言してください。