类中关于静态构造函数的执行顺序

 刚刚使用静态类中的静态构造函数,有一些不太懂的地方,于是google了一下,看了一些文章,把自己的一些总结发上来吧。

  google的初衷就是因为这个:

在类中初始化成员到底是直接初始化还是在类的静态构造函数中初始化呢?

   还是先把最终的建议给展示出来:

第一就是简单静态成员,例如类型为值类型等,使用成员初始化语句来完成;

第二静态成员初始化比较复杂,或者有可能出现异常,那么用静态构造函数来完成。

   下面是在网上找的一个例子,主要是熟悉下静态构造函数的执行顺序:

    

复制代码
static class A
{
public static int X = B.Y;
static A()
{
++X;
}
}

static class B
{
public static int Y = A.X;
static B()
{
++Y;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(A.X);
Console.WriteLine(B.Y);
Console.Read();
}
}
复制代码

不卖关子,先说下执行结果

2

1

下面来解释下:首先执行Console.WriteLine(A.X),于是,便会跳到类A中去,因为调用了成员X,于是先给X分配空间,并初始化为0,于是又执行X = B.Y这句,执行时候变跳到了类B中,首先也是初始化成员Y,并初始化为0,继续执行Y = A.X,因为A.X已经初始化为0了,所以直接Y=0,接着再执行类B的静态构造函数,于是Y变成了1,执行完后在回到X=B.Y这句中,以为B.Y==1,所以X=1,然后再执行A类的静态构造函数,于是A.X==2了。

  可能上面有些绕,其实执行顺序就是,先初始化类中的静态成员,然后在执行类的静态构造函数,执行顺序:类的静态成员>类的静态构造函数。

  一上就上对静态构造函数的一些理解。

posted @   cuitsl  阅读(277)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
友情博客:大熊的外星球
点击右上角即可分享
微信分享提示