override结果...

longai123 2012-02-20 12:01:01
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);
}
答:X=1,Y=0
y=0想不明白......
...全文
127 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
longai123 2012-02-20
  • 打赏
  • 举报
回复
WFKMU理解对了...
wfkmu 2012-02-20
  • 打赏
  • 举报
回复
先调动A的构造函数,执行PrintFields()方法,而PrintFields是虚方法,实际上执行的是B的PrintFields方法。Y没有初始值,所以为0.
不知道是不是对的。。
nonocast 2012-02-20
  • 打赏
  • 举报
回复
再说一句,这个和override无关,只和继承有关
nonocast 2012-02-20
  • 打赏
  • 举报
回复
在A的构造时还没有构造B
new B()顺序上先A构造,再构造B
所以0啦
你可以在每个构造和方法中放置Console.WriteLine来观察顺序
色拉油 2012-02-20
  • 打赏
  • 举报
回复
创建B的对象的时候要首先执行
int x=1;
int y;
然后调用构造函数,调用构造函数先调用父类构造函数
执行PrintFields(); 因为PrintFields是虚方法,执行的B的PrintFields方法
这时候y还没有赋值,用int默认值0
欢乐的小猪 2012-02-20
  • 打赏
  • 举报
回复
在做B的构造函数之前调用A的构造函数
欢乐的小猪 2012-02-20
  • 打赏
  • 举报
回复
在做Public B()之前调用的A的构造函数
LanFavourite 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhizhuochangeing 的回复:]

因为 Y没有初始值 ,所以在调用的时候默认构造函数的时候,系统会 给其属性 赋上 初始值:整型 是0 bool类型默认值是 false ...... string 默认值是 null .....等等。
[/Quote]

++;
  • 打赏
  • 举报
回复
因为 Y没有初始值 ,所以在调用的时候默认构造函数的时候,系统会 给其属性 赋上 初始值:整型 是0 bool类型默认值是 false ...... string 默认值是 null .....等等。
  • 打赏
  • 举报
回复
。。。。。3楼的正解。

110,538

社区成员

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

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

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