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() { }
}
解説
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点です。
- staticな自分自身のインスタンス
- 外部にインスタンスを与えるGetInstance()メソッド
- プライベートコンストラクタ
1つずつ解説していきます。
1.staticな自分自身のインスタンス
これは複数のクラスに渡すためのユニークなインスタンスとなります。
2.外部にインスタンスを与えるGetInstance()メソッド
外部クラスからインスタンスを取得するための関数です。
1のインスタンスをリターンします。
※外部から呼び出す際は、
UniqueClass unique = UniqueClass.GetInstance();
のようにしてインスタンスを取得します。
3.プライベートコンストラクタ
privateで宣言されたコンストラクタです。
この宣言をすると外部からnewを使ったインスタンスを生成できなくなります。
間違ってnewを使用されたくないときに宣言してください。
Author And Source
この問題について(C# 複数のクラスに同一のインスタンスを提供する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/gaoras/items/b2543de5bc82e7a1d3b1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .