我不太懂为什么会输出这个结果.帮忙解释一下啊.
12.在下面的例子里
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);
}
当使用new B()创建B的实例时,产生什么输出?
答:X=1,Y=0;x= 1 y = -1
12.在下面的例子里
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);
}
当使用new B()创建B的实例时,产生什么输出?
答:X=1,Y=0;x= 1 y = -1
实例化父类时调用了PrintFields方法,此时y取默认值0
实例化子类时,y被初始化为1,一共输出两次
子类的静态构造函数
子类的非静态成员初始化语句
父类的静态成员初始化语句
父类的静态构造函数
父类的非静态成员初始化语句
父类的构造函数
子类的构造函数当new B()时,A的构造函数中的PrintFields()方法被执行~~此方法在B中被override了~这时,还未执行B的构造函数,所以,x和y都是初始化时候的值~即:X=1,Y=0