C#中的静态类"初始化"模式?

Dun*_*ill 7 c# static initialization

使用这种模式有什么好处或原因?

public sealed class myStaticClass
{
    private static bool _initialized;
    private static object _lockObject;

    private static string _someStaticField;
    private static int _anotherStaticField;
    private static string _nthStaticField;

    static myStaticClass()
    {
        _initialized = false;  
        _lockObject = new object();
    }

    public myStaticClass()
    {
    }

    public static void Initialize()
    {
        if(!_initialized)
        {
            lock(_lockObject)
            {
                if(!_initialized)
                {
                    //do initializing
                    _someStaticField = someApplicationSetting;
                    _anotherStaticField = anotherApplicationSetting;
                    _nthStaticField = nthApplicationSetting;

                    _initialized = true;
                }
            }
        }
    }

    public static string NthStaticField 
    { 
        get {

            Initialize();
            return _nthOtherField;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果在访问任何类成员之前保持静态构造函数被调用,并且只调用一次,那么为什么不将所有初始化逻辑放在静态构造函数中呢?

编辑: 我已经更新了模式,以更好地反映我发现它的.net框架中的类.我已经改变了static类的修饰符sealed,我还添加了一个空public构造函数.

PS.如果您想知道,我见过这种模式的FormsAuthentication班级是班级.

Yah*_*hia 2

这样做的唯一原因是,如果初始化成本昂贵(就 CPU/RAM 而言),或者需要的东西只能在运行时稍后使用(IMO)...此实现将初始化延迟到最近的可能时刻(就在第一次访问之前)。这是一种Lazy<T>提供...