public class A
{
public A() { PrintFields(); }
public virtual void PrintFields() { //.. }
}
public class B : A
{
private int x = 2 , y;
public B():base() { this.y = -1; }
public override void PrintFields()
{
Console.WriteLine("X = {0} , Y = {1}" , x , y);
}
}
public class Test
{
static void Main()
{
B b = new B();
//执行打印结果:
//X = 2 , Y = 0
}
}
问题一:
在执行B的构造函数之前首先执行A的构造函数,但是在A的构造函数内部调用了一个PrintFields()方法,这个方法是A对象本身的虚方法吗?
问题二:
如果不是的话,为什么?这里用到了虚拟方发表了吗?或者说换一种问法,由于是创建了B对象所以才执行的B对象中PrintFields()方法吗?那么A对象是根据什么知道该调用那个PrintFields()方法?
问题三:
如果说虚拟方法的执行是依照对象运行时类型决定的(CLR),但是这个B对象还没有完全创建完哪.