这个单例实现是否正确且线程安全?
class Class
{
public static readonly Class Instance;
static Class()
{
Instance = new Class();
}
private Class() {}
}
最佳答案
从技术上讲,您的版本应该可以工作。但是,我不建议在 Singleton 类中公开公共(public)字段,而更喜欢使用 Property(仅使用 getter)。如果您以后需要进行更改,这将帮助您的 API 面向 future 。我还建议密封任何单例实现,因为子类化单例类几乎总是一个坏主意并且有问题。
如果您的目标是 .NET 3.5 或更早版本,我个人会在 C# 中使用以下代码:
public sealed class Singleton
{
static readonly Singleton instance = new Singleton();
public static Singleton Instance
{
get
{
return instance;
}
}
static Singleton() { }
private Singleton() { }
}
如果您使用的是 .NET 4,您可以通过 Lazy<T>
使这对您自己来说更容易。 :
public sealed class Singleton
{
private static readonly Lazy<Singleton> instance = new Lazy<Singleton>( () => new Singleton() );
private Singleton() {}
public static Singleton Instance { get { return instance.Value; } }
}
.NET 4 版本还具有完全惰性的优势 - 即使您的 Singleton
类具有在访问“实例”属性之前使用的其他静态方法。您也可以通过使用私有(private)嵌套类来实现完全惰性的 .NET 3.5 版本。 Jon Skeet demonstrated this on his blog .
关于c# - 这个 Singleton 实现是否正确且线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3136008/