日期:2014-05-18  浏览次数:20958 次

采鸟基础问题
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

能不能详细的给我讲解下 是怎么走的 再线等 明白就给分

------解决方案--------------------
当你new B()时,由于B是继承自A
先会创建一个A的实例,这样就先创建A的构造,然后调用PrintFields(); 
而PrintFields() 是一个virtual 方法,被B类重写,然后调用B的PrintFields();
由于y 没初始化,所以先输出1,0
这时开是调用B构造,给y一个-1,然后输出就是1,-1了


------解决方案--------------------

你是在什么环境下调试的,把你的程序写在VS控制台里,插个断点调试就知道了。