gpt4 book ai didi

c# - 从静态方法线程安全返回引用吗?

转载 作者:太空狗 更新时间:2023-10-29 18:08:37 24 4
gpt4 key购买 nike

我有一个类:

class PrintStringDataBuilder
{
PrintStringDataBuilder() { }
public static GetInstance()
{
return new PrintStringDataBuilder();
}

//other class methods and fields, properties
}

从客户端代码访问:

PrintStringDataBuilder instance = PrintStringDataBuilder.GetInstance();

上面的调用是线程安全的吗?

编辑:只是想避免写作PrintStringDataBuilder 生成器 = new PrintStringDataBuilder();在 asp.net mvc web 应用程序中多次。 PrintStringDataBuilder 类中没有其他静态方法、静态字段或静态属性。

最佳答案

是吗?在不知道该类构造函数的内部结构的情况下,您可以说调用 GetInstance() 是线程安全的。但是,不能保证该实例上的任何方法都是线程安全的,特别是因为您没有提供任何这些方法。

这简称为工厂模式。

编辑:如果你想返回一个单例,你可以这样做:

.NET 4+

private static Lazy<PrintStringDataBuilder> _instance = new Lazy<PrintStringDataBuilder>(() =>
{
return new PrintStringDataBuilder();
});

public static PrintStringDataBuilder GetInstance()
{
return _instance.Value;
}

.NET 3.5 及以下

private static PrintStringDataBuilder _instance = null;
private static object _lockObject = new object();

public static PrintStringDataBuilder GetInstance()
{
if(_instance == null)
{
lock(_lockObject)
{
if(_instance == null)
_instance = new PrintStringDataBuilder();
}
}

return _instance;
}

关于c# - 从静态方法线程安全返回引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10355439/

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