【问题标题】:When do static variables get initialized in C#?静态变量什么时候在 C# 中初始化?
【发布时间】:2010-10-19 06:56:00
【问题描述】:

我想知道什么时候静态变量(在一个类中)进入图片(初始化)?是在第一次调用实例构造函数之后还是在类加载之后? 什么时候加载类?

【问题讨论】:

标签: c# static


【解决方案1】:

哦,这很复杂。这取决于是否设置了 beforefieldinit 标志,而这又(在 C# 中)取决于是否存在静态构造函数。更糟的是;在 .NET 4 中 我相信 行为发生了变化,使其比以前更加“懒惰”。

坦率地说,我不会在这里对任何特定行为进行编码;很简单:只要您使用常规代码访问静态字段,就会在您尝试使用它们之前对其进行初始化。

Jon Skeet 对此 herehere 有很好的报道

【讨论】:

  • +1 表示“我不会为任何特定行为编写代码”,明智的建议
  • @DaviddCeFreitas “不是反射的东西”(和其他作弊)
【解决方案2】:

静态变量在相应的类加载后出现。 它不是在构造函数调用之后,因为当我们使用 new 运算符创建类的对象时,构造函数调用开始起作用,并且静态变量在类级别而不是对象级别可用。

【讨论】:

    猜你喜欢
    • 2012-02-01
    • 2019-09-22
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 2011-03-30
    相关资源
    最近更新 更多