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

转载于:https://www.cnblogs.com/La5DotNet/archive/2012/11/26/2788736.html

### C# 静态构造函数的用法和特性 #### 1. 基础概念 静态构造函数是一种特殊的构造函数,用于初始化类的静态成员。它的名称必须与类名相同,并且需要用 `static` 关键字修饰[^1]。 #### 2. 特性和规则 - **无访问修饰符**:静态构造函数不能带有任何访问修饰符(如 `public` 或 `private`),因为它由 .NET 框架自动调用,而非程序显式调用[^4]。 - **唯一性**:一个类中只能定义一个静态构造函数,且该构造函数不允许有任何参数。 - **执行时机**:静态构造函数会在首次访问类的静态成员或创建第一个实例之前被自动调用。它只执行一次,并且其执行顺序优先于其他操作。 - **不可手动调用**:由于它是框架控制的,因此无法在代码中直接调用静态构造函数。 - **线程安全性**:当多个线程尝试第一次使用某个类时,.NET 运行时会确保静态构造函数仅被执行一次,从而提供内置的线程安全保障[^3]。 - **初始化静态成员**:静态构造函数的主要用途是对静态字段进行复杂的初始化处理[^5]。 #### 3. 使用场景 - **单例模式实现**:通过静态构造函数可以简化单例模式的设计,在多线程环境下无需额外同步机制即可保证实例的安全创建。 - **资源加载**:适用于需要一次性完成某些全局配置或资源读取的情况,比如数据库连接字符串设置、日志系统的启动等[^2]。 - **复杂逻辑初始化**:对于那些依赖外部条件才能确定初始状态的静态数据结构来说非常有用。 #### 示例代码 下面是一个简单的例子展示如何应用静态构造函数: ```csharp using System; public class ExampleClass { private static string _message; // 定义了一个静态构造函数 static ExampleClass() { Console.WriteLine("Static Constructor Called."); _message = DateTime.Now.ToString(); // 初始化时间戳作为消息内容 } public static void DisplayMessage() { Console.WriteLine(_message); } } class Program { static void Main(string[] args) { // 调用了静态方法触发了静态构造器 ExampleClass.DisplayMessage(); // 再次调用不会重新触发静态构造器 ExampleClass.DisplayMessage(); } } ``` 此示例展示了静态构造函数是如何在初次访问到 `ExampleClass` 的时候才被执行,并且在整个应用程序生命周期内仅仅发生了一次。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值