单例中的成员变量是否应声明为静态?

njr*_*101 5 c# singleton

环顾网络,我已经看到了这种简单的模式,该模式实现了(线程安全的)单例(在C#中)。

public sealed class MySingleton
{
    private static readonly MySingleton _instance = new MySingleton();

    private string[] _data = new string[10];

    // Private constructor, so no outsiders have access.
    private MySingleton()
    {
        // Initialize _data member here
    }

    // Static method to provide access to instance
    public static MySingleton Instance
    {
      get { return _instance; }
    }

    public string GetStringCount
    {
        return _data.Length;
    }

}
Run Code Online (Sandbox Code Playgroud)

我知道该_instance成员需要声明为静态,因为它是从static Instance()方法访问的。

但是是否应将其他成员声明为静态成员?根据定义,单例仅存在一次,因此成员也只能存在一次(对于单个实例),就像静态变量仅存在一次一样。

我应该声明_data为静态吗?

  • 功能上会有区别吗?
  • 有任何性能差异吗?
  • 还有其他原因喜欢静态还是非静态?

Alo*_*aus 5

如果您有一个Singleton,则只有一个类的实例。类成员不能是静态的(实例属性支持字段除外)。如果您的Singleton中有多个静态对象,则实际上不是创建一个Singleton,而是创建了多个Singleton。一般建议是仅在绝对必要时才使用static关键字。

将singelton数据存储为单例实例中的非静态类成员会更干净。