首页 新闻 会员 周边

问个C#问题求大虾

0
悬赏园豆:15 [已解决问题] 解决于 2012-07-02 16:53

请问结果是什么,然后最最重要的是解释下原因,无限感谢,超级感谢,只有结果没有原因的免答谢谢

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的实例时,产生什么输出?

觉信的主页 觉信 | 初学一级 | 园豆:66
提问于:2012-07-02 16:29
< >
分享
最佳答案
1

输出:

x=1, y=0

 

原因:

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

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

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

收获园豆:15
无之无 | 大侠五级 |园豆:5095 | 2012-07-02 16:39

谢谢您了,先基类再派生类,因为基类没有输出y,y是数值型,所以y=0对吗?那x也没输出吧、、、

觉信 | 园豆:66 (初学一级) | 2012-07-02 16:52

基础知识扎实,学习

IceS | 园豆:197 (初学一级) | 2012-07-02 16:55

@觉信: x是类成员变量,在调用构造函数之前,会先处理类成员变量(有初始化的也会同时初始化)

无之无 | 园豆:5095 (大侠五级) | 2012-07-02 17:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册