一道笔试题,我做错了。

王尼瑪 2010-12-23 09:13: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

为什么会这样子输出呢???
...全文
153 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
广州接入 2010-12-23
  • 打赏
  • 举报
回复
从类的构造顺序来讲,是先调用父类构造函数再到子类构造函数。所以开始输出的是x=1,y=0.(y的默认值为0)。但如果没有显示再调用B.printfields,是不可能输出x=1,y=-1.
因为A构造的时候调用的还是B的pringfields.
正确的输出就是x=1,y=0.
xiaoxaioxiaoyuer 2010-12-23
  • 打赏
  • 举报
回复
在new B()时程序会先调用 A 类的构造方法 ,及会去调用PrintFields()方法,该方法被B类重写的,所有第一次y是int的默认值0,所有输出x=1,y=0 。 第二次 y被赋值为-1,所有输出x=1 y=-1。
wuyq11 2010-12-23
  • 打赏
  • 举报
回复
y默认值0
F11单步

110,532

社区成员

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

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

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