静态字段初始化发生时?

时间:2015-11-13 17:01:46

标签: c# static initialization field

我在MSDN上读到了

的输出
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
{
   public static int X = Test.F("Init A");
}

class B
{
   public static int Y = Test.F("Init B");
}

可以是

Init A 
Init B
1 1

Init B
Init A
1 1

但我无法弄清楚为什么X的初始化程序和Y的初始化程序的执行顺序可能以任何顺序发生?

我总是在我的系统上得到第二个结果(我预期的)但是看不出第一个结果是如何实现的?

感谢。

1 个答案:

答案 0 :(得分:2)

您正在阅读语言规范,该规范告诉您根据语言规范允许发生什么。您在您正在使用的语言的特定实现中看到了一致的行为,并且该行为与规范一致,因此一切都很顺利。

语言规范警告你,你不应该依赖程序中的那种行为,因为在未来的运行时版本中(或者在不同的处理器/平台/星期几),行为可能会改变。