Во время исследования наилучшего способа создания синглтона на C # я наткнулся на следующие статья, в которой кратко упоминается, что в C ++
«Спецификация C ++ оставила некоторую двусмысленность в отношении порядка инициализации статических переменных».
Я изучил вопрос и нашел this и это. Где в основном суть (насколько я понимаю) в том, что порядок инициализации статических переменных в C ++ не определен. Хорошо, я думаю, что пока все хорошо, но затем я хотел понять следующее утверждение, которое позже в статье
«К счастью, .NET Framework решает эту двусмысленность за счет обработки инициализации переменных».
Итак, я нашел эту страницу, где они говорят
Инициализаторы переменных статического поля класса соответствуют последовательности назначений, которые выполняются в текстовом порядке, в котором они появляются в объявлении класса.
и приведем пример
using System;
class Test
{
static void Main() {
Console.WriteLine("{0} {1}", B.Y, A.X);
}
public static int F(string s) {
Console.WriteLine(s);
return 1;
}
}
class A
{
static A() {}
public static int X = Test.F("Init A");
}
class B
{
static B() {}
public static int Y = Test.F("Init B");
}
the output must be:
Init B
Init A
1 1
«Потому что правила выполнения статических конструкторов (как определено в Разделе 10.11) предусматривают, что статический конструктор B (и, следовательно, инициализаторы статических полей B) должен выполняться перед статическим конструктором A и инициализаторами полей».
Но что меня смущает, так это то, что я понял, что порядок инициализации статических переменных в этих примерах будет основан на том, когда метод или поле внутри класса было впервые вызвано, что, в свою очередь, основано на порядке выполнения блока кода. (в данном случае слева направо). IE: полностью не зависит от того, где - или порядок - объявления класса. Тем не менее, согласно моей интерпретации этой статьи, в нем говорится, что это результат порядка объявления тех классов, которые мое тестирование не поддерживает?
Не мог бы кто-нибудь прояснить мне это (и смысл статьи) и, возможно, предоставить лучший пример, который неграмотно описывает описанное поведение?