这段代码的运行结果

来源:百度知道 编辑:UC知道 时间:2024/06/07 23:26:54
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,能帮我解释一下吗,多谢了还有下面这段
using System;
class A
{
public A(){
PrintFields();
}
public virtual void PrintFields(){}
}
class B:A
{
int x=1;
int y;
public B(){
y=-1;
}
public override void PrintFields(){
Console.WriteLine("x={0},y={1}",x,y);

1 在调用A.X时B还没有建立,所以B.Y默认为0,那么X=1
然后再调用B,这时候A.X=1,那么B.Y=A.X+1 =1+1 =2

2 不理解,按照你答案猜测是在B生成的时候还没有调用B的构造函数的时候,去掉用基类A,然后由于virtual方法 优先调用了B类中该方法的实现,导致输出为:X=1,Y=0,即输入该句时,B类得构造函数还没有执行到