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