惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
T
Troy Hunt's Blog
S
Schneier on Security
C
Cybersecurity and Infrastructure Security Agency CISA
C
CXSECURITY Database RSS Feed - CXSecurity.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Security Latest
Security Latest
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MyScale Blog
MyScale Blog
Recorded Future
Recorded Future
A
About on SuperTechFans
PCI Perspectives
PCI Perspectives
H
Help Net Security
量子位
Blog — PlanetScale
Blog — PlanetScale
云风的 BLOG
云风的 BLOG
S
Security @ Cisco Blogs
The Hacker News
The Hacker News
P
Privacy International News Feed
Hacker News: Ask HN
Hacker News: Ask HN
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
N
Netflix TechBlog - Medium
N
News and Events Feed by Topic
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Threatpost
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Simon Willison's Weblog
Simon Willison's Weblog
有赞技术团队
有赞技术团队
博客园 - 司徒正美
J
Java Code Geeks
S
Securelist
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Security Archives - TechRepublic
Security Archives - TechRepublic
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 叶小钗
S
Secure Thoughts
Latest news
Latest news
S
Security Affairs
T
The Exploit Database - CXSecurity.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
I
Intezer
雷峰网
雷峰网
Hacker News - Newest:
Hacker News - Newest: "LLM"
Engineering at Meta
Engineering at Meta
Hugging Face - Blog
Hugging Face - Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

博客园 - 光脚码农

CentOS安装JDK CentOS 7中安装和配置Promethues - 光脚码农 - 博客园 查看和指定SpringBoot内嵌Tomcat的版本 - 光脚码农 - 博客园 CentOS中安装Azkaban 2.5 Centos7 安装Nodejs SpringBoot实用技巧札记 SQL实用札记【SQL Sever篇】 如何利用正则表达式匹配花括号内的内容 如何为Windows Forms应用程序添加启动参数(Start-Up Parameters) 利用存储过程来重命名SQL Server数据库 .NET批量操作窗口样式 ViewData、ViewBag、TempData、Session的区别与联系 如何为自己的网页实现一个“回到顶部”的链接? 如何获得数据库中所有用户创建的索引 如何为一个类型为Color的属性设置默认值 用BCP从SQL Server 数据库中导出Excel文件 DataGridView如何绑定DataRow对象集合 Const vs. Readonly Windows下Git的安装与配置(Cygwin)
话说静态构造函数
光脚码农 · 2014-07-22 · via 博客园 - 光脚码农

静态构造函数

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

比如下面的这段代码:

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