gpt4 book ai didi

C# 单例实例永远不会为空

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:31 25 4
gpt4 key购买 nike

我正在尝试在 Azure 网络作业中实现单例模式。在本地调试实例永远不会为空。它总是设置为单例对象本身。我觉得我在这里遗漏了一些非常明显的东西。

public sealed class HubErrorList
{
private static volatile HubErrorList instance;
private static object syncRoot = new Object();

private HubErrorList() {}

public static HubErrorList Instance
{
get {
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
{
instance = new HubErrorList();
}
}
}
return instance;
}
}
}

最佳答案

在访问该属性之前,该实例将保持为空。根据您对此的检查方式,您的工具可能会导致这种差异。

也就是说,一个更简单更好的“惰性初始化”单例模式是使用 Lazy<T>相反:

public sealed class HubErrorList
{
private static Lazy<HubErrorList> instance = new Lazy<HubErrorList>(() => new HubErrorList());
private HubErrorList() {}

public static HubErrorList Instance { get { return instance.Value; } }
}

关于C# 单例实例永远不会为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29902909/

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