[C#编程指南] 聊聊静态构造函数那些事儿!

2021/4/25 1:25:24

本文主要是介绍[C#编程指南] 聊聊静态构造函数那些事儿!,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

什么是静态构造函数?

  静态构造函数从字面上就知道它也是构造函数的一种,那静态构造函数和构造函数有什么不同呢?要了解静态构造函数首先就要先明确构造函数。构造函数,顾名思义,是用来创建和构造类或者结构的函数,每当创建类或者结构时,将会调用其构造函数(相关概念取自微软官网文档对构造函数的描述)。类或者结构可能具有采用不同参数的多个构造函数,即相同的类或者结构,可能会有多个不同的构造函数负责去创建这个类或者结构,这些构造函数可以是无参的,也可以是包含有多个不同参数的方法。

  当我们想要创建相关类或者结构的实例的时候,CLR(公共语言运行时)就会根据我们传入的参数(无参或者有参)去实例化相关的类和结构,我们每创建相关的对象实例的时候就会调用其相关的构造函数去创建它,借此我们引出相关的概念:实例级别的构造函数

  构造函数可以相应地分为:①实例级别的构造函数类级别的构造函数

实例级别的构造函数:当我们每次新创建对象实例的时候就会调用到的构造函数,这类构造函数是实例级别的构造函数,类比于做炸鸡时,每块炸鸡都经历过腌(腌制)、挂(挂浆)、裹(裹粉)、炸(油炸)这四个步骤,这四个步骤就好比是炸鸡的“构造函数”(的相关逻辑),即每创建一个炸鸡实例都会调用到炸鸡的构造函数。

类级别的构造函数:区别于实例级别的构造函数,类级别的构造函数就引申出我们今天所要讨论的主角:静态构造函数。类级别的构造函数不同于实例级别的构造函数,类级别的构造函数仅仅会在首次创建该类的实例或者引用该类的静态成员时被调用。

  引用微软官网文档对静态构造函数的描述:静态构造函数用于初始化任何静态数据,或执行仅需执行一次的特定操作,将在创建首个实例或引用任何静态成员之前自动调用静态构造函数。什么意思?静态构造函数仅仅会在这个类首次被实例化,或者该类中所包含的静态成员被引用前被调用且仅会被调用一次,且当静态构造函数和其它实例级别的构造函数同时存在的时候,静态构造函数先于其它实例级别的构造函数被执行,这说明名当我们多次创建同一个类的实例时,静态构造函数仅会在创建第一个实例的时候被执行一次,而实例构造函数在每次创建实例的时候都会被调用执行。

  类比于做炸鸡的时,在进行腌(腌制)、挂(挂浆)、裹(裹粉)、炸(油炸)这四个步骤之前,还有起锅烧油等其它准备步骤需要做,而起锅烧油等其它准备步骤就相当于炸鸡的“静态构造函数”(的相关逻辑),起锅烧油等其它准备步骤在炸鸡的整个制作流程中一定会做且仅会做一次,这就对应了静态构造函数中用于初始化任何静态数据,或执行仅需执行一次的特定操作的相关概念。

静态构造函数的特点

  由此我们总结静态构造函数的相关特点:

  • 类或者结构的静态构造函数只能有一个
  • 类或者结构的静态构造函数没有访问修饰符(public,private)且没有参数:静态构造函数不能被用户直接调用,即并且仅应由CLR(共用语言运行时)调用。静态构造函数和无参构造函数可以同时存在,前者属于类级别的构造函数,后者属于实例构造函数;
  • 类或者结构的静态构造函数不能继承或者重载:子类不能继承父类的构造函数,父类和子类静态构造函数的相关逻辑需要我们手动去实现,当子类和父类都含有构造函数,创建子类实例的时候会先执行子类的静态构造函数再执行父类的静态构造函数(详细的创建顺序会专门写文章来分析);
  • 类或者结构的静态构造函数仅在首次创建该类或者结构的实例或者引用该类或者结构的静态成员时被调用
  • 如果未提供类或者结构的静态构造函数,会将所有静态字段初始化为其默认值。


这篇关于[C#编程指南] 聊聊静态构造函数那些事儿!的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程