是否应将单例中的成员变量声明为静态
本文关键字:变量 声明 静态 成员 单例中 是否 | 更新日期: 2023-09-27 18:33:23
环顾网络,我看到了这个实现(线程安全)单例(在 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
声明为静态吗?
- 会不会有任何功能差异?
- 性能差异吗?
- 还有其他理由更喜欢静态或非静态吗?
如果你有一个单例,你就有一个类的实例。类成员不得是静态的(实例属性支持字段除外)。如果您的单例中有多个静态数据,则实际上创建的不是一个单例,而是许多单例。一般建议是仅在绝对必要时使用 static 关键字。
将单例数据存储在单例实例中作为非静态类成员会更干净。
如果您选择在静态类上使用单例(请参阅此处和此处),那么我认为使用实例成员而不是静态成员更有意义。