0

重複の可能性:
JonSkeetによるシングルトンの説明

私はシングルトンについて読んでいて、今(SOのおかげで)かなり手がかりがあります。

私の実装(教科書である必要があります)は次のようになります

public sealed class Singleton
{
   private static readonly Singleton instance = new Singleton();

   private Singleton(){ }    
   static Singleton(){ }

   public static Singleton Instance { get { return instance; } }
}

私の質問は、.NET 4.0で、コンストラクターを含める必要があるかどうかです(プライベートctorは暗黙的に作成されると思いますが、静的(疑わしい)についてはどうでしょうか)。

以下も同様に機能するようですが、私が考案したテスト例でのみうまく機能するのではないかと心配しています。

public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();    
    public static Singleton Instance { get { return instance; } }
}
4

2 に答える 2

5

私の質問は、.NET 4.0 では、コンストラクターを含める必要があるかどうかです (コンストラクターは暗黙的に作成されていると思います)。

はい、Fx4 または C# 4 では変更はあり
ません。インスタンス コンストラクターを提供しない場合、コンパイラはパブリックコンストラクターを提供します。
静的コンストラクターを提供する理由はありません。

以下も同様に機能するようですが、

ポイントは、 うまくいかないvar s = new Singleton();という ことです。それがテストすることです。

于 2012-09-25T11:21:48.863 に答える
1

クラスが静的でない限り、コンストラクターのないクラスには、クラスのインスタンス化を有効にするために、C# コンパイラーによってパブリックの既定のコンストラクターが与えられます。詳細については、静的クラスと静的クラス メンバーを参照してください。

Sealed キーワードは継承不可にするだけです。

コンストラクターを非公開にすることで、クラスがインスタンス化されないようにすることができます。コンストラクターを含めない場合、シングルトン デザイン パターンは考慮されません。したがって、基本的に、はい、真のシングルトンが必要な場合は、それらも含める必要があります..

hvd のコメントが指摘したように、他のコンストラクターも含める必要があります。

ソース: 公式 MSDND C#

于 2012-09-25T11:25:07.553 に答える