一段简单的C#的代码求解? 10

usingSystem;classA{publicstaticintX;staticA(){X=B.Y+1;}}classB{publicstaticintY=A.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(){}
static void Main(){
Console.WriteLine("X={0},Y={1}",A.X,B.Y);
}
}
产生的输出结果是什么?
答:x=1,y=2

A.X= B.(A.X+1)+1 ..这太绕了。 为何X=1,Y=2? X/Y都没有初始化过啊!求高手步步解析。
展开
 我来答
shinewo2011
2013-09-11
知道答主
回答量:16
采纳率:0%
帮助的人:10.1万
展开全部
Class B中有个Main执行入口,所以B首先得到初始化,顺序是static成员Y->static构造函数。在初始化Y时,引用了A.X,编译器又开始初始化Class A(注意这时Class B的初始化并没有完成),顺序也是static成员X->static构造函数。Class A中X在定义的时候没有被赋予初始值(在定义static变量时,尽量赋予初始值),编译器会默认赋予值0(int型)。然后再执行static的构造函数,由于Class B的初始化这时还没有完成,所以B.Y的值在这时被编译器赋予默认值0,所以在A的static的构造函数执行完后,X的值变为1,然后返回B继续完成初始化,得到Y的值为2。最后执行Main,输出A.X和B.Y的值。
kingboyf4
2013-09-10 · TA获得超过283个赞
知道小有建树答主
回答量:201
采纳率:100%
帮助的人:240万
展开全部

debug下,就知道实际情况了:

执行顺序如下:

  1. public static int Y=A.X+1;  //此时B.Y = 0;

  2. public static int X; //此时A.X = 0;

  3. static A(){ X=B.Y+1; }  //此时A.X = 1;

  4. 又回到public static int Y = A.X + 1;  //此时B.Y = 2;

  5. static B(){}

 

静态类执行顺序

  1. 静态变量的初始化(并附默认值)

  2. 静态构造函数

 

要多实际操作,才能帮助我们理解程序。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qubo8816
2013-09-10 · 超过45用户采纳过TA的回答
知道小有建树答主
回答量:111
采纳率:0%
帮助的人:120万
展开全部
C#小白默默路过,看了半天也是没有看懂。。。只是知道程序其实不简单,用了好多C#后面的知识

Class在这里是”类“的意思,在这里定义了一个A类和一个B类
class A
{
public static int X; //定义一个int类型的变量X
static A(){ //这个A类的构造函数(也叫构造器),就是调用A类时,运行的第一个方法
X=B.Y+1; //X=B,很容易理解,应该是把B类赋值给int类型变量X,但是B类没有实例化,不知道
} //能不能这么调用(应该会报错),而且B类不同于int类型,照理论来说,这样的赋值应该不成立, 后面的Y+1,应该是搞错了吧,是不是本来是Y++的意思 (等于Y=Y+1)

class B
{
public static int Y=A.X+1; //这里同上也是定义了一个变量Y,然后把A类型赋值给Y(同上
static B(){} //应该不成立).又是定义B类的一个构造器,为空
static void Main(){ //Main方法,一个程序的开始和结束(不严谨)
Console.WriteLine("X={0},Y={1}",A.X,B.Y); //{0}这个是占位符,也就是输出X= (A.X的值)
} //A.X 应该是A类中X变量的值,同下

这是一个C#小白的理解,大神避让,求揭谜。上面的程序究竟是神马。。。。
追问
你牛B.......
追答
真心不牛逼,还是小白……半夜回答问题,还把程序看错了……
不过这个程序真的能运行吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
祎正谊25
2013-09-11 · TA获得超过156个赞
知道小有建树答主
回答量:430
采纳率:75%
帮助的人:213万
展开全部
首先执行
public static int Y=A.X+1;
执行过程为
public static int Y; //static 修饰整型变量会初始化其值为0
Y=A.x+1;//此时先执行A.x=B.Y+1,Y=0,所有A.x=1,又Y=A.x+1,所以Y再次赋值为2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式