的初始化命令在我的研究,以建立一个Singleton在C#中我碰到下面article那里是一个简单提一下,在C++歧义静态变量
“的C++规范留下了一些偶然的最佳方式围绕初始化 静态变量的顺序模糊不清。“
我最终调查了这个问题,发现this和this。基本上这个点(据我所知)是C++中静态变量的初始化顺序是未定义的。好吧,我想到目前为止好,但后来我想明白下面的语句是,本文的后面,使
“幸运的是,.NET框架通过其 处理变量的初始化的解决了这个模棱两可。”
所以我发现this页面,他们说那里的一类
的静态字段变量初始化对应分配的 序列在文本顺序 执行它们出现在类宣言。
并给出
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:完全独立于类声明的位置或顺序。然而,根据我对这篇文章的解释,它说这是由于我的测试没有备份的那些类的声明顺序的结果?
有人能否为我澄清这一点(以及文章试图提出的观点),也许提供了一个更好的例子来说明所描述的行为?一类
非常感谢你的非常简洁的答案。 – 2012-07-11 03:45:52