单身成员变量应该声明为静态吗?

时间:2012-05-06 09:37:29

标签: 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;
    }

}

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

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

我应该将_data声明为静态吗?

  • 会有任何功能差异吗?
  • 任何表现差异?
  • 偏好静态还是非静态的任何其他理由?

2 个答案:

答案 0 :(得分:4)

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

将单个实例中的singelton数据存储为非静态类成员更为清晰。

答案 1 :(得分:1)

如果您选择在静态类上使用单例(请参阅thisthis),那么我认为让实例成员而不是静态成员更有意义。