这到.NET笔试题怎么理解

来源:百度知道 编辑:UC知道 时间:2024/05/28 11:53:56
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(){}
static void Main(){
Console.WriteLine("X={0},Y={1}",A.X,B.Y);
}
}
产生的输出结果是什么?
答:x=1,y=2

请问执行过程是怎样的

首先进入Class B 因为主函数在Class B中
先执行声明语句 public static int Y=A.X+1;

此时调用了A.X
进入A类
先执行声明语句 public static int X;
再执行静态代码块 X=B.Y+1;
此时B.Y 已经被声明 但是没赋值过 所以默认值为0
X=B.Y+1;这条语句执行完 A.X值为1

回到B类 public static int Y=A.X+1;
结果Y = 1+1 =2

最后结果就是 X=1,Y=2

首先是进入ClassA,因为首先打印A类的X,进入Class的构造函数,这时X=B.Y+1;但是ClassB的属性Y=A.X+1; int类型的A.X没有初始值,默认A.X=0;即在ClassA中的构造函数中的X=B.Y+1也就是X=0+1; X=1;
Y的值:Y=A.X+1;上面有了X的值Y的值就简单了,都是静态的,Y=1+1=2.

你将程序放到VS里面,加上断点自己调试,执行过程自然明了。

这道题主要是考察你,静态构造器的使用!
静态造器是不需现实调用的,在你使用对象过后,他由系统自动调用且调用的时间不确定,总之,不会出现NullReferences的异常,如果你想深入了解,可以使用ILDASM来看
这里Class A采用了MonoState设计模式,所以X就是类的一个全局变量
在A.X的时候Class A的静态构造器被调用这时X的值就变成了1,后面同理分析.