加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 07:53:57 所属栏目:百科 来源:网络整理
导读:使用这种模式有什么好处或原因? public sealed class myStaticClass{ private static bool _initialized; private static object _lockObject; private static string _someStaticField; private static int _anotherStaticField; private static string _n
使用这种模式有什么好处或原因?
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;
        }
    }
}

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

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

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

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读