首页 新闻 会员 周边

关于C#静态字段的问题

0
[待解决问题]

Console.WriteLine(Foo.X);
Console.WriteLine(Foo.Y);

class Foo{
public static int X = Y;
public static int Y = 5;
}

为啥结果是:
0
5

dsadrc的主页 dsadrc | 菜鸟二级 | 园豆:202
提问于:2023-01-03 21:27
< >
分享
所有回答(5)
0

我猜测是这样的:

如果没有定义一个静态构造函数,编译后会自动生成一个静态构造函数,这个函数里,先给X赋值Y(Y这个时候还是0),然后Y赋值5.

会长 | 园豆:12401 (专家六级) | 2023-01-04 09:14
0

得先读到Y,才能执行Y=5

猝不及防 | 园豆:2781 (老鸟四级) | 2023-01-04 12:53
0

有什么问题吗,代码从上到下依次执行。
Console.WriteLine(Foo.X); 时 Y 还未赋值,当前是默认值咯

Adming | 园豆:119 (初学一级) | 2023-01-04 13:32
0

反编译初始化代码如下 :

IL_0000: ldsfld int32 Hmiot_Primitive.Wpf.Foo::Y   //加载Y
IL_0005: stsfld int32 Hmiot_Primitive.Wpf.Foo::X   //设置X

IL_000a: ldc.i4.5 //加载5
IL_000b: stsfld int32 Hmiot_Primitive.Wpf.Foo::Y   //设置Y

so,没有什么为什么,这是别个ms编译器规则,如果编译器是自己的,那么可以按照自己的规则执行,当然jit和cpu还必须得听话。

花飘水流兮 | 园豆:13560 (专家六级) | 2023-01-09 14:59
0

变量的初始值考虑进去就行了

RokiZhang | 园豆:208 (菜鸟二级) | 2023-01-18 16:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册