Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么静态变量在C中声明之前就可以使用#_C#_Static Variables - Fatal编程技术网

C# 为什么静态变量在C中声明之前就可以使用#

C# 为什么静态变量在C中声明之前就可以使用#,c#,static-variables,C#,Static Variables,我能够成功编译并运行以下程序: class MyClass1 { public static int x = y; public static int y = 10; } static void Main(string[] args) { Console.WriteLine(MyClass1.x); //prints 0 Console.WriteLine(MyClass1.y); //prints 10 } 为什么编译成功?在声明和初始化之前,x如何获取y的

我能够成功编译并运行以下程序:

class MyClass1
{
    public static int x = y;
    public static int y = 10;
}

static void Main(string[] args)
{
    Console.WriteLine(MyClass1.x); //prints 0
    Console.WriteLine(MyClass1.y); //prints 10
}

为什么编译成功?在声明和初始化之前,
x
如何获取
y
的值?如果实例字段出现同样的gets编译时错误。

它们是按顺序初始化的。第一个
x
设置为
y
的值,该值为0(默认值)。然后将
y
设置为10。

它们按顺序初始化。第一个
x
设置为
y
的值,该值为0(默认值)。然后将ECMA-334-17.4.5.1静态字段初始化中的
y
设置为10。

类声明的静态字段变量初始值设定项 对应于在中执行的赋值序列 它们在类声明中出现的文本顺序。如果 静态构造函数(§17.11)存在于类中,执行 静态字段初始值设定项在执行之前立即发生 静态构造函数否则,静态字段初始值设定项为 在第一次使用之前的依赖于实现的时间执行 该类的静态字段


因此,在
x
变量的初始化行中使用
y
变量,并使用ECMA-334-17.4.5.1静态字段初始化中的默认值
0
进行初始化

类声明的静态字段变量初始值设定项 对应于在中执行的赋值序列 它们在类声明中出现的文本顺序。如果 静态构造函数(§17.11)存在于类中,执行 静态字段初始值设定项在执行之前立即发生 静态构造函数否则,静态字段初始值设定项为 在第一次使用之前的依赖于实现的时间执行 该类的静态字段


因此,在
x
变量的初始化行中使用
y
变量,并使用默认值
0

定义“before”进行初始化。由于它们是静态的,MyClass1不需要实例化就可以使用x和y,所以在这种情况下,“before”只能在您将它们添加到类之前出现。我不太明白您的意思。我知道x和y都是静态场。当我们第一次尝试访问某个类型的任何静态字段或静态方法(本例中为x)时,通过静态构造函数对静态字段进行初始化。当它发生时,我相信当x被初始化时y应该是可用的,但在下一行发现y是有问题的。定义“before”。由于它们是静态的,MyClass1不需要实例化就可以使用x和y,所以在这种情况下,“before”只能在您将它们添加到类之前出现。我不太明白您的意思。我知道x和y都是静态场。当我们第一次尝试访问某个类型的任何静态字段或静态方法(本例中为x)时,通过静态构造函数对静态字段进行初始化。当它发生时,我相信当x被初始化时y应该是可用的,但在下一行发现y是有问题的。