c# – 静态构造函数和单例类

我有一个实现单例设计模式的对象缓存。我的singleton方法总是在首次访问该属性时懒惰加载静态实例。

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;
        }
    }

我没有很多静态构造函数的经验,所以如果它是相同或更差的lazy load属性的实现,则不希望跨越这个想法。

干杯,
加里

最佳答案
Jon Skeet在讨论这个问题的单身人士中有一个很好的article

转载注明原文:c# – 静态构造函数和单例类 - 代码日志