当静态字段初始化发生时

本文关键字:初始化 静态 字段 | 更新日期: 2023-09-27 18:21:46

我在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的初始化器的执行顺序可以按任意顺序发生?

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

谢谢。

当静态字段初始化发生时

您正在阅读语言规范,该规范告诉您根据语言规范允许发生什么。您在使用的语言的特定实现中看到了一致的行为,而且这种行为与规范一致,所以一切都很好。

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