Неоднозначность в порядке инициализации статических переменных

Во время моего исследования наилучшего способа создания Singleton в C #я наткнулся на следующую статью , где есть краткое упоминание о том, что в C++

"The C++ specification left some ambiguity around the initialization order of static variables."

В конце концов я изучил вопрос и нашел это и это . Где в основном точка (, насколько я понимаю ), заключается в том, что порядок инициализации статических переменных в C++ не определен. Хорошо, я думаю, пока все хорошо, но затем я хотел понять следующее утверждение, которое позже делает статья

"Fortunately, the.NET Framework resolves this ambiguity through its handling of variable initialization."

Итак, я нашел эту страницу, где говорится

The static field variable initializers of a class correspond to a sequence of assignments that are executed in the textual order in which they appear in the class declaration.

и привести пример

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

"Because the rules for when static constructors execute (as defined in Section 10.11) provide that B's static constructor (and hence B's static field initializers) must run before A's static constructor and field initializers."

Но что меня смущает, так это то, что я понимаю, что порядок инициализации статических переменных в этих примерах будет основан на том, когда метод или поле в классе были впервые вызваны, что, в свою очередь, основано на порядке выполнения блока кода. (в этом случае слева направо ). IE :Полностью не зависит от того, где -или порядка -объявления класса. Тем не менее, согласно моей интерпретации этой статьи, это результат порядка объявления тех классов, который не подтверждается моим тестированием?

Может ли кто-нибудь пояснить это (и то, что статья пытается донести до меня ), и, возможно, привести лучший пример, который неграмотно описывает описанное поведение?

6
задан Community 23 May 2017 в 12:14
поделиться