2013-03-13 95 views
6

我aproblem静态变量声明在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 

为什么会发生这种情况?

+2

这不是声明式编程,就像在Prolog中一样。在C#命令中有一个命令它们运行。在这种情况下,它是直接的... – ppeterka 2013-03-13 14:58:46

+0

你知道吗,如果你定义v1如:'private const int v1 = 15;'你得到15而不是0? – 2013-03-13 15:06:30

回答

11

静态字段的初始化顺序与声明相同。当您使用的v1值初始化v2v1是尚未初始化,所以它的值是0

3

静态变量获得值的方式意味着在第二个示例中,v1未初始化,因此在将其分配给v2时,默认值为0。

5

静态变量在其声明的顺序进行初始化,所以当你在你的第二个例子分配v2v1仍然有其默认值0

我希望你知道,做这样的事情是一个坏主意。

3

static字段的初始化顺序如下其声明。

在您的第二个代码中,v1未初始化。由于v1Int32,所以它是一个值类型,所有值类型的默认值是0

从C#4.0中的页面上的果壳74

静态字段初始化的顺序运行中的字段声明 。

对你而言;

private static int v2 = v1; 
// v2 initialized 0 because of the default value of value types. 
private static int v1 = 15; 
// v1 initialized 15