C# 中的静态类初始化顺序是确定性的吗?
C# 中静态类初始化的顺序确实是确定性的。根据 ECMA-334 标准:
初始化顺序示例
考虑以下代码:
static class B { public static int X = 7; static B() { Console.WriteLine("B.X = " + X); X = A.X; Console.WriteLine("B.X = " + X); } } static class A { public static int X = B.X + 1; static A() { Console.WriteLine("A.X = " + X); } } static class Program { static void Main() { Console.WriteLine("A = {0}, B = {1}", A.X, B.X); } }
执行顺序
重新排列注意事项
即使重新排列 A 类和 B 类,初始化的顺序仍然保持不变,因为第一次使用 A.X 会触发初始化链。
结论
静态类初始化的顺序是确定的,并遵循 ECMA-334 标准中概述的规则。第一次使用静态成员或创建实例将触发初始化过程,该过程按照字段初始值设定项后跟静态构造函数的顺序进行。
以上是C# 的静态类初始化顺序是可预测的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!