zoukankan      html  css  js  c++  java
  • 话说静态构造函数

    静态构造函数

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

    比如下面的这段代码:

    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语句,代码更加简洁了。

  • 相关阅读:
    动态库的链接和链接选项-L,-rpath-link,-rpath
    SSL/TLS 握手过程详解
    数字证书及CA介绍
    sendto函数的坑
    如何捕捉并分析SIGSEGV的现场
    gdb进程调试,多进程调试
    linux下的守护进程daemon
    winform的水印TextBox
    Winform中的TextBox的小技巧
    WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptRes
  • 原文地址:https://www.cnblogs.com/EasonWu/p/static-constructor-csharp.html
Copyright © 2011-2022 走看看