静态构造函数和单例类

我有一个实现Singleton设计模式的对象缓存。 当我第一次访问属性时,我对单例的方法总是延迟加载静态实例。

public static Widget
{
    get
    {
        if(instance==null) instance = new Widget();
        return instance;
    }
}

但是,我知道这种方法不是线程安全的,而对于实例为空的检查引入了一个小的低效率。 在实例化静态实例的类上实现静态构造函数是否明智?

据我了解,每当第一个静态属性访问发生时,都会调用静态构造函数。 这是否有效?它是否会为当前的懒惰加载方法提供任何好处,或者是探索代理实现还是使用锁来强制它是线程安全的?

public static Widget
    {
        get
        {
            if(instance==null)
            {
                lock(padlock)
                {
                    if(instance==null) instance = new Widget();
                }
            }
            return instance;
        }
    }

我对静态构造函数没有太多的经验,所以如果这个想法是延迟加载属性的相同或更差的实现,那么不希望跳过这个想法。

干杯,加里


Jon Skeet在讨论这个问题的单身人士上有一篇不错的文章。


我不推荐使用自己的线程安全的懒惰初始值设定项,并且可能弄错了,我建议使用Joe Duffy的懒惰初始值设定项类。

http://www.bluebytesoftware.com/blog/PermaLink,guid,a2787ef6-ade6-4818-846a-2b2fd8bb752b.aspx

链接地址: http://www.djcxy.com/p/78789.html

上一篇: Static Constructor & Singleton class

下一篇: How do I declare class