プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2016/11/15

C# 6.0 におけるシングルトンの実装

update2017/09/21 event_note2016/11/15 0:51

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つであることを保証します。

参考URL