求问为什么这里的new B()对象 会调用B类重写的PrintFields()方法,而不是A类虚方法,求解释谢谢

alrainy 2017-08-08 05:55:12
 public 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);
}
}
class Program
{


static void Main(string[] args)
{
new B();


Console.Read();

}


求问为什么这里的new B()对象 会调用B类重写的PrintFields()方法,而不是A类虚方法,求解释谢谢
...全文
137 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
白衣如花 2017-08-08
  • 打赏
  • 举报
回复
你打断点可能更有趣 我怀疑结果是x = 1, y = 0 因为一个类的构造会先调用父类的构造,而A的构造调用了虚方法,虚方法会找到重写的进行打印,此时y还未赋值,也就是int默认0 A构造执行完,才执行B构造
exception92 2017-08-08
  • 打赏
  • 举报
回复
B中重写的方法就是A的虚方法, 虚方法用来重写,谁重写谁执行。

110,565

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧