C# 6.0 におけるシングルトンの実装方法です。
ネットで検索すればいくらでもサンプルを見つけられますが、C# らしい書き方をしてみたいと思います。
他に良い実装方法があれば教えてください。
とりえあずサンプルコード
C# 6.0 で実装しています。
public sealed class Hoge
{
public static Hoge Instance { get; } = new Hoge();
private Hoge()
{
}
}
クラスの宣言
アクセス修飾子は public
でなければインスタンス化するときに例外が発生してしまいます。
また、sealed
により継承を禁止しておきます。
インスタンス変数とプロパティ
インスタンスを取得するためのアクセサーは用意せずにプロパティを使用します。
プロパティは static
で定義し、宣言時に new
します。
C# 6.0 では自動実装プロパティに初期化子が指定できるので、とても簡潔に書けます。static
で定義することにより、アプリケーション起動時にインスタンス化されます。
プライベートコンストラクタ
コンストラクタにアクセス修飾子として private
を指定することにより、他のクラスではインスタンス化できなくなります。
これにより、このクラスのインスタンスが1つであることを保証します。