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的对象只是先声明,而没有进行初始化,它的初始化工作就在静态的构造方法中完成。

posted @ 2012-11-26 11:23  伯箫  阅读(2045)  评论(0编辑  收藏  举报