一段简单的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都没有初始化过啊!求高手步步解析。 展开
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都没有初始化过啊!求高手步步解析。 展开
4个回答
展开全部
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的值。
展开全部
debug下,就知道实际情况了:
执行顺序如下:
public static int Y=A.X+1; //此时B.Y = 0;
public static int X; //此时A.X = 0;
static A(){ X=B.Y+1; } //此时A.X = 1;
又回到public static int Y = A.X + 1; //此时B.Y = 2;
static B(){}
静态类执行顺序
静态变量的初始化(并附默认值)
静态构造函数
要多实际操作,才能帮助我们理解程序。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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#小白的理解,大神避让,求揭谜。上面的程序究竟是神马。。。。
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.......
追答
真心不牛逼,还是小白……半夜回答问题,还把程序看错了……
不过这个程序真的能运行吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先执行
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询