什么时候静态变量在C#中初始化?

bad*_*ash 25 c# static

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

Mar*_*ell 32

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

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

Jon Skeet在这里这里都有很好的写作

  • 为"我不会编码任何特定行为"+1,明智的建议 (3认同)
  • @DaviddCeFreitas“不是反射的东西”(和其他作弊项) (2认同)