• 话说静态构造函数


    静态构造函数

    静态构造函数用来初始化静态数据, 或执行一个只需要执行一次的任务。 静态构造函数会在类对象第一次实例化时,或者任何静态成员被调用时自动调用执行。

    比如下面的这段代码:

    class SimpleClass
    {
        // Static variable that must be initialized at run time. 
        static readonly long baseline;
     
        // Static constructor is called at most one time, before any 
        // instance constructor is invoked or member is accessed. 
        static SimpleClass()
        {
            baseline = DateTime.Now.Ticks;
        }
    }
    

    另一个例子就是我们经常用的单例模式,因为单列模式的类只有一个实例,所以通常会在实例化之前执行一些配置初始化的代码,我们可以用下面的代码来演示,

    public sealed class ClassicSingleton
    {
        private static ClassicSingleton instance;
        private static object syncRoot = new Object();
    
        private ClassicSingleton() { }
    
        public static ClassicSingleton Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (syncRoot)
                    {
                        if (instance == null)
                        {
                            ...custom code
                            instance = new ClassicSingleton();
                        }
                    }
                }
    
                return instance;
            }
        }
    }
    

    这里我们必须通过lock关键字来保证在多线程环境中,类也只能有一个实例。而如果使用静态构造函数,我们可以有更简单有实现版本:

    public sealed class Singleton
    {
        private static Singleton instance;
    
        private Singleton() { }
    
        static Singleton()
        {
            ...custom code
            instance = new Singleton();
        }
    
        public static Singleton Instance
        {
            get
            {
                return instance;
            }
        }
    }
    

    我们不需要使用lock来锁定创建实例的代码,也少了if语句,代码更加简洁了。

  • 相关阅读:
    Scrapy中间件
    Scrapy简介
    Scrapy解析器xpath
    postman
    yarn
    brew 安装 yarn 时候失败
    immutability-helper 用途+使用方法
    js 正则
    react redux 应用链接
    react 事件传参数
  • 原文地址:https://www.cnblogs.com/EasonWu/p/static-constructor-csharp.html
Copyright © 2020-2023  润新知