C# 静态构造函数&;独生子女班
我有一个实现Singleton设计模式的对象缓存。我处理singleton的方法总是在第一次访问属性时延迟加载静态实例C# 静态构造函数&;独生子女班,c#,multithreading,static,singleton,C#,Multithreading,Static,Singleton,我有一个实现Singleton设计模式的对象缓存。我处理singleton的方法总是在第一次访问属性时延迟加载静态实例 public static Widget { get { if(instance==null) instance = new Widget(); return instance; } } 但是,我知道这种方法不是线程安全的,例如检查null会带来一点低效率。在实例化静态实例的类上实现静态构造函数是否明智 据我所知,只要第
public static Widget
{
get
{
if(instance==null) instance = new Widget();
return instance;
}
}
但是,我知道这种方法不是线程安全的,例如检查null会带来一点低效率。在实例化静态实例的类上实现静态构造函数是否明智
据我所知,只要第一次静态属性访问发生,就会调用静态构造函数。这是有效的吗?与当前的延迟加载方法相比,它会提供任何好处吗?还是更好地探索代理实现,或者使用锁强制它是线程安全的
public static Widget
{
get
{
if(instance==null)
{
lock(padlock)
{
if(instance==null) instance = new Widget();
}
}
return instance;
}
}
我对静态构造函数没有太多的经验,所以如果它是延迟加载属性的一个同等或更差的实现,我不想插手这个想法
干杯,
GaryJon Skeet对讨论这个问题的Singleton有很好的理解。与其使用自己的线程安全惰性初始值设定项并可能弄错它,我建议您阅读
lazy
上的msdn
我相信这个问答线程会给你想要的东西:这也适用于IOC容器:链接应该更新到