C#中关于构造函数的问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 05:15:00
请问下面题目的输出是什么?为什么?谢谢,
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
首先就是字段是在构造函数之前声明和初始化的,也就是说,如果你在构造函数里面不给他赋值的话,覆盖不了原来的值(不信的话在B的构造函数里面把x的值变下)
然后再实例化一个B,执行的序列是:
object()(这个貌似写出来是多余的)
A()
B()
也就是相当于两次printfields()
但是第一次y没有说是什么值,所以y默认为0,
于是输出x=1,y=0(注意到B()里面什么都没有,所以调用被重写了的方法)
------------
还有问题就+QQ:530243963或者直接在问题补充里面说明即可

不输出,只是更改y的值,除非写成
public B() : base()

x=1,y=0;
这个其实是个子类和父类构造函数初始化的顺序问题。
当然是父类先初始化了。你可以这么想没有父亲那有孩子。