[转]一道关于继承的工作机制的试题

 1 using System;
 2 class A
 3 {
 4 public A()
 5 {
 6 PrintFields();
 7 }
 8 public virtual void PrintFields(){}
 9 }
10 class B:A
11 {
12 int x=1;
13 int y;
14 public B()
15 {
16 y=-1;
17 }
18 public override void PrintFields()
19 {
20 Console.WriteLine("x={0},y={1}",x,y);
21 }

当使用new B()创建B的实例时,产生什么输出?

 

 虽然未证实,不过看起来应该是对的!下面是热心网友的回答。

 

笨笨蜗牛答:

输出:x=1, y=0

原因:

1、构造一个类的时候,先初始化类成员(先基类后派生类),x变量在定义的时候初始化了值为1

2、调用构造函数的时候,是先运行基类的构造函数。虽然B中对y赋值为1,但是,在调用A的构造执行打印输出的时候,还没有执行这赋值语句

3、在.NET中,要求变量先赋值后使用,这个是为了安全,并非绝对。任何类型的变量在未赋值前都有一个默认的初始值,数值类型的初始值是0.、

 

来源:http://q.cnblogs.com/q/38201/

posted @ 2012-07-02 16:52  Seasons1987  阅读(159)  评论(0编辑  收藏  举报