Рассмотрим следующий фрагмент класса с двумя статическими переменными-членами:
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, а затем, когда выясняется, что B
требуется для инициализации A
, инициализируется B
, а затем возвращается, чтобы завершить инициализацию A
?
Каковы общие правила по этому поводу? Почему оно так себя ведет? Я видел другие вопросы, касающиеся этого (Когда статические переменные получают инициализированы в C#?), но они не дают точного ответа на этот вопрос. Каков порядок инициализации статических переменных в C#? в первую очередь рассказывает о том, как это работает между классами, а не внутри одного класса (хотя дополнение Джона Скита к его ответу - "По многочисленным просьбам, вот мой первоначальный ответ, когда я думал, что вопрос был об инициализации порядок статических переменных в классе:...." действительно отвечает на этот вопрос, он скрыт в гораздо более длинном ответе).