c#中关于static的问题

在百度知道里看到的提问和答案 c#中关于static的问题,为什么下面的代码得出Y的值为3, x的值为1 using System ; class A { public static int x; static A() { x=B.y+1; } } class B { public static int y=A.x+1; static B() { y=y+1; } static void Main() { Console.WriteLine("x={0},y={1}",A.x,B.y); //Console.ReadLine(); } } 答案 namespace StaticTest { class Program { static void Main() { Console.WriteLine("x={0},y={1}", A.x, B.y); Console.ReadLine(); } } class A { public static int x; static A() { x = B.y + 1; } } class B { public static int y = A.x + 1; static B() { y = y + 1; } } } 要知道为什么会得出这样的结果,首先要了解类的静态构造在何时执行。 1.在类实例化对象时静态构造自动执行; 2.在调用类的静态变量时静态构造自动执行; 这是我所知道的。下面说说这个程序的执行过程: Console.WriteLine("x={0},y={1}", A.x, B.y); 1)从这语句得知它首先调用的是A类的x静态变量, 这里符合上面所提的第二种情况,即(在调用类的静态变量时静态构造自动执行) 2)static A() { x = B.y + 1; } 此时将执行x = B.y + 1; 这里调用了B类的y静态变量, (这里也符合第二种情况) 3)public static int y = A.x + 1; (x=B.y+1;未执行完,因此 A.x 此时为默认值 即0,而y的值为1.) 4)static B() { y = y + 1; //y的值为2 } 5)由此就可以得知x = B.y + 1; 计算结果为3 Console.WriteLine("x={0},y={1}", A.x, B.y); x=3,y=2

转载于:https://www.cnblogs.com/qqhepp/articles/2139342.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值