考虑以下具有两个静态成员变量的类代码段:
public static class Foo
{
static string A = GetA(B);
static string B = "required for A";
...
现在我的理解是,只有在第一次访问
A
和B
时它们才会被初始化。然而,当我执行了上面的片段的一个完整版本,其中A
在B
初始化之前被访问时,会导致null
传递给GetA()
,而不是"required for A"
。为什么行为不是开始初始化A,然后当意识到需要初始化A时,初始化B,然后返回完成初始化A呢?这方面有哪些通用规则?为什么会这样呢?我看到其他问题也涉及到这个问题(C#中静态变量何时初始化?),但它们并没有完全回答这个问题。 C#中的静态变量初始化顺序是什么?主要讨论了跨类的工作方式,而不是单个类内部的工作方式(尽管Jon Skeet对他的答案进行了补充,“按照大众的需求,这是我认为问题是关于类内部静态变量的初始化顺序时的原始答案:...”,但它被埋在一个更长的答案中)。