请问各位高手,为什么下面的程序输出为:
x=1,y=0
x=1,y =-1
程序:
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);
}
public static void Main()
{
B b = new B();
b.PrintFields();
Console.Read();
}
}
x=1,y=0
x=1,y =-1
程序:
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);
}
public static void Main()
{
B b = new B();
b.PrintFields();
Console.Read();
}
}
执行的时候int x = 1;
int y; 这时候y是0然后调用A的构造函数,里面调用了PrintFields,所以打出来的就是1, 0然后调用B的构造函数,这时候就把y变成-1了,再调用PrintFields,所以打出来的就是1, -1
b.PrintFields();
---------------------
第一行代码:
由于B派生自A,所以先执行A的构造函数,此时x=1,y虽然没有赋值,但会自动初始化为0,执行PrintFields,会输出x=1,y=0.然后再执行B的构造函数,将y赋值为-1.
第二行代码:
执行PrintFields,此时y的值已经是-1了,所以输出x=1,y=-1