我对C#
中的静态变量声明的顺序很不满意当我运行此代码时:
static class Program {
private static int v1 = 15;
private static int v2 = v1;
static void Main(string[] args) {
Console.WriteLine("v2 = "+v2);
}
}
输出结果为:
v2=15
但是当我像这样更改静态变量声明顺序时:
static class Program {
private static int v2 = v1;
private static int v1 = 15;
static void Main(string[] args) {
Console.WriteLine("v2 = "+v2);
}
}
输出是:
v2 = 0
为什么会这样?
答案 0 :(得分:10)
静态字段的初始化顺序与声明的顺序相同。使用v2
的值初始化v1
时,v1
尚未初始化,因此其值为0.
答案 1 :(得分:4)
静态变量按其声明顺序初始化,因此当您在第二个示例中指定v2
时,v1
仍然具有其默认值0
。
我希望你知道,做这样的事情虽然是一个坏主意。
答案 2 :(得分:2)
静态变量获取值的方式意味着在第二个示例中,v1
未初始化,因此在将其分配给v2
时采用默认值0。
答案 3 :(得分:2)
static
字段初始化了与其声明相同的顺序。
在您的第二个代码中,v1
未初始化。由于v1
为Int32
,因此它是值类型,所有值类型的默认值均为0
。
从第74页的Nutshell中的C#4.0开始。
静态字段初始值设定项按字段的顺序运行 声明。
在你的情况下;
private static int v2 = v1;
// v2 initialized 0 because of the default value of value types.
private static int v1 = 15;
// v1 initialized 15