ホームに戻る
出典 :
関連 :
目次 :
C#でのシングルトン
デザインパターンのひとつである「シングルトン」を、C#で実装する場合の例を以下に挙げる。
// シングルトンクラス
public sealed class SingletonClass
{
// 唯一の SingletonClass インスタンス
private static SingletonClass _singleInstance = new SingletonClass();
// インスタンスを取得するためのプロパティ
public static SingletonClass Instance
{
get
{
return _singleInstance;
}
}
// コンストラクタ
private SingletonClass()
{
// (生成時に行う処理を記述する)
}
}
要点は以下のとおり。
- SingletonClass は public かつ sealed 修飾により、継承不可とする
- 唯一のインスタンスは private かつ static とする
- 唯一のインスタンスを取得するための public かつ static なメソッドまたはプロパティ(ここでは Instance )を設ける
(読み取り専用とする)
- コンストラクタを private とし、インスタンスをクラス外で生成できなくする
(C#3.0以降)自動プロパティを用いた場合は更に簡略化できる。
// シングルトンクラス
public sealed class SingletonClass
{
// 唯一の SingletonClass インスタンス(自動プロパティ)
public static SingletonClass Instance { get; } = new SingletonClass();
// コンストラクタ
private SingletonClass()
{
// (生成時に行う処理を記述する)
}
}
C++との差異
C++の場合はコピー・ムーブの各コンストラクタおよび演算子を明示的に「定義なし」とする必要があったが、
C#ではクラスオブジェクトは参照渡しで、ムーブの概念が無いことからいずれも記述は不要である。
(C#にもコピーコンストラクタの概念自体は存在するが、ここでは割愛する。)
その他はC++と同様である。
汎用シングルトンクラス
シングルトン基底クラスを継承することで、上記のようなシングルトン特有のボイラープレートを省略することができる。
出典元を参照。