我想实现简单的Singleton,经过一些调查后,工作正常。我使用一个简单的控制台应用程序测试它,但如果其他人可以评论它将有所帮助。我之所以怀疑是因为Singleton的新实例是在静态构造函数中创建的,并且不确定它是否有任何副作用。
sealed class SingletonEx
{
public static readonly SingletonEx Instance;
static SingletonEx()
{
if (null == Instance)
{
Instance = new SingletonEx();
}
}
private SingletonEx() { }
}
如果你很好奇,我发现http://csharpindepth.com/Articles/General/Singleton.aspx对这个主题很有帮助。
答案 0 :(得分:0)
这不是静态构造函数的典型用法,尽管可以这样做。副作用是构造函数在第一次使用之前运行任何SingletonEx实例将在您的代码中使用。拥有一个静态构造函数不会对" Singleton"行为。但是,要注意启动将在另一个阶段发生,而不是通常情况下静止。
我担心以下几行:
public static readonly SingletonEx Instance;
这是你的问题:
public
- 表示可以在类外部进行更改。因为Singleton实例是由私有静态成员变量引用的,所以实例化不会发生,直到对Instance属性的调用首次引用该类。因此,此解决方案实现了lazy instantiation属性的一种形式,如Singleton的Design Patterns形式。当实施设计模式尽可能遵循它的设计时
readonly
- 也不应该在这里。它通常是可编辑的,除非你有充分的理由。