当前位置: 代码迷 >> C# >> 求好手帮忙看着,贴中的定义类实例的方式有何不妥
  详细解决方案

求好手帮忙看着,贴中的定义类实例的方式有何不妥

热度:17   发布时间:2016-05-05 03:52:45.0
求高手帮忙看着,贴中的定义类实例的方式有何不妥

class BaseActivity
{
      public static BaseDevice m_BaseDevice = null;
      public BaseActivity()
      {
              if (m_BaseDevice == null)
              {
                   m_BaseDevice = new BaseDevice();
              }
       }
}

class BaseDevice
{
        public BARService m_BarService = null;
        public IDCService m_IDCService = null;
        public PINService m_PinService = null;
        public PRJService m_PrjService = null;
        public PRRService m_PrrService = null;
        public PRPServie m_PrpService = null;
        public EDMService m_EdmService = null;
        public MoService m_MoService = null;

        public BaseDevice()
        {
            AppLog.Info("Enter BaseDevice()");
            m_BarService = new BARService();
            m_IDCService = new IDCService();
            m_PinService = new PINService();
            m_PrjService = new PRJService();
            m_PrrService = new PRRService();
            m_PrpService = new PRPServie();
            m_EdmService = new EDMService();
            m_MoService = new MoService();
        }
}

其中BaseActivity为 N个Class的基类。程序加载时,一次性把N个Class 全部实例化。
就会出现BaseActivity 的构造被执行N遍。
问题1:以上代码是不是避免了BaseDevice中的类被初始化N遍?
问题2:这样的写法有什么不妥?
------解决思路----------------------
不会重复构造
静态字段只会在静态构造函数中初始化一次。你这么写没有必要
------解决思路----------------------
除了不能在多个线程里实例化,没什么问题
------解决思路----------------------
1、你都公开了构造函数,还有什么不重复创建的?你只是在构造函数里面判断了是否存在静态的基础类,但如果在并发情况下,还是会出现new多次
2、这样的写法哪里不妥,问题大了,真心就看不懂你为啥要static一个基类,而这个类还有好多子类?
  相关解决方案