gpt4 book ai didi

c# - 这个 Singleton 实现是否正确且线程安全?

转载 作者:太空狗 更新时间:2023-10-29 19:59:06 27 4
gpt4 key购买 nike

这个单例实现是否正确且线程安全?

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com