zoukankan      html  css  js  c++  java
  • C#静态构造器的作用

    就是初始化静态成员

    比如有几个静态成员需要初始化
    那你把初始化代码放到哪呢?

    放到普通构造函数里,那肯定不行。因为静态成员没有创建实例就要可用。

    专门建一个static public方法来初始化?这样用起来非常不方便,你需要在“第一次”使用静态成员前先调用这个方法。
    如果你在使用静态成员前忘了调用该方法,会导致错误。
    如果重复调用,又是冗繁操作。

    所以静态构造函数就派上用场了。
    它会在你第一次调用静态成员(或创建实例)的时候自动被调用

    以上解释引自:http://zhidao.baidu.com/question/112464220.html

    下面是MSDN对静态构造函数特点的描述:

      1.静态构造函数既没有访问修饰符,也没有参数

      2.在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类

      3.无法直接调用静态构造函数

      4.在程序中,用户无法控制何时执行静态构造函数

    下面看一段代码:

    /// <summary>
        /// 数据抽象类
        /// </summary>
        public abstract class DataProvider
        {
            
            #region "DataProvider Instance"
    
            private static DataProvider _defaultInstance = null;
            static DataProvider()
            {
                DataProvider dataProvider;
                if (Common.GetDBType == "MsSql")
                    dataProvider = new SqlDataProvider();
                else if (Common.GetDBType == "Access")
                    dataProvider = new AccessDataProvider();
                else if (Common.GetDBType == "Oracle")
                    dataProvider = new OracleDataProvider();
                else
                    throw new ApplicationException("数据库配置不对!");
                
                _defaultInstance = dataProvider;
            }
    
            /// <summary>
            /// 数据访问抽象层实例
            /// </summary>
            /// <returns></returns>
            public static DataProvider Instance()
            {
    
                return _defaultInstance;
            }
        }

    上面是一个静态构造方法的实际用例,代码中,因为不知道要使用的是什么类型的数据库,所以DataProvider的对象只是先声明,而没有进行初始化,它的初始化工作就在静态的构造方法中完成。

  • 相关阅读:
    cocos2d-x 2.2 study ------------------------ 双击事件(转)
    cocos2d-x打包Android
    cocos2d-x在win7下的android交叉编译环境
    Cocos2d-x之CCImage深入分析
    Eclipse开发C/C++之使用技巧小结
    TortoiseSVN安装使用
    cocos2d-x 2.2 study ------------------------ CCCallFunC家族
    cocos2d-x改底层之动态改变UIListView中的某项在链表中的位置
    汇编语言,以10进制的方式显示数字
    JVM
  • 原文地址:https://www.cnblogs.com/La5DotNet/p/2788736.html
Copyright © 2011-2022 走看看