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

  • 相关阅读:
    Ionic3 遇到的一些错误-Error: Cannot find module 'reflect-metadata'
    Ionic3 遇到的一些错误-submodule update -q --init --recursive
    Ionic3 一些命令
    Npm 使用淘宝镜像
    在PHP中使用AES加密算法加密数据-2
    php实现AES/CBC/PKCS5Padding加密解密(又叫:对称加密)-1
    php rsa加密解密实例
    composer 安装Laravel、thinkphp5.1
    PHP原生分页的编写
    微信授权登录并获取用户信息接口开发
  • 原文地址:https://www.cnblogs.com/La5DotNet/p/2788736.html
Copyright © 2011-2022 走看看