帮忙给看一下最后的输出结果!!

conggang 2009-03-18 03:35:06
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
可是有人说不对!!请大侠们指点一下!

...全文
105 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Nathan_Loo 2009-03-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 conggang 的回复:]
引用 3 楼 Nathan_Loo 的回复:

=。=!
这是我再网上给好友找的面试题。。
网上的答案是x=1,y=0;x=1,y=-1.
你再程序里跑一下。。
main方法里写
            B c = new B();
            //c.PrintFields();
            Console.Read();

关键就在于实例化后要不要执行c.PrintFields();
反正我觉得又争议!
如果不执行。。题目问的产生什么输出。我觉得应该是1,0.但是此时值确实是1和-1




确实是执行了c.PrintF…
[/Quote]


是啊。。搞的我都不知道怎么给分了。。领导给的正确答案。。我的答案是1,0.。
所以别再这个问题上浪费时间了。。阿门。。下班了哈哈。。。
conggang 2009-03-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Nathan_Loo 的回复:]
=。=!
这是我再网上给好友找的面试题。。
网上的答案是x=1,y=0;x=1,y=-1.
你再程序里跑一下。。
main方法里写
            B c = new B();
            //c.PrintFields();
            Console.Read();

关键就在于实例化后要不要执行c.PrintFields();
反正我觉得又争议!
如果不执行。。题目问的产生什么输出。我觉得应该是1,0.但是此时值确实是1和-1


[/Quote]

确实是执行了c.PrintFields();结果就是两个 1,0;1 -1
这个问题我觉得出的不够好,!
贫僧又回来了 2009-03-18
  • 打赏
  • 举报
回复
没有MAIN会输出?LS各位输出一个给我看看!
如果我在MAIN中这样写

static void Main(string[] args)
{
A b = new A();
b.PrintFields();
}



或者


static void Main(string[] args)
{
A b = new B();
b.PrintFields();
}


结果会一样吗?
oysoft 2009-03-18
  • 打赏
  • 举报
回复
会输出两次
第一次 x=1,y=0
第二次 x=1,y=-1
南哥1207 2009-03-18
  • 打赏
  • 举报
回复
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);
}
}
深海之蓝 2009-03-18
  • 打赏
  • 举报
回复
这个是没争议的,你自己输入代码试一下,是1,0
如果还有问题,请重新看看多态是怎么回事
深海之蓝 2009-03-18
  • 打赏
  • 举报
回复
应该是1,0
没问题啊?
sjt000 2009-03-18
  • 打赏
  • 举报
回复
1.0是正确的
Nathan_Loo 2009-03-18
  • 打赏
  • 举报
回复
=。=!
这是我再网上给好友找的面试题。。
网上的答案是x=1,y=0;x=1,y=-1.
你再程序里跑一下。。
main方法里写
B c = new B();
//c.PrintFields();
Console.Read();

关键就在于实例化后要不要执行c.PrintFields();
反正我觉得又争议!
如果不执行。。题目问的产生什么输出。我觉得应该是1,0.但是此时值确实是1和-1

zgke 2009-03-18
  • 打赏
  • 举报
回复
不用想 X=1 Y=0

先执行B成员 然后去执行父类的成员构造,在父成员的构造里执行方法.父亲类是virtual 就执行了了子类override方法..输出时候 B的构造还没执行呢.
贫僧又回来了 2009-03-18
  • 打赏
  • 举报
回复
你这段代码会有输出结果吗?

111,126

社区成员

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

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

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