为了账号安全,请及时绑定邮箱和手机立即绑定

问个C#问题求大虾

问个C#问题求大虾

长风秋雁 2018-08-01 06:05:43
请问结果是什么,然后最最重要的是解释下原因,无限感谢,超级感谢,只有结果没有原因的免答谢谢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的实例时,产生什么输出?
查看完整描述

1 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

输出:

x=1, y=0

 

原因:

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

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

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


查看完整回答
反对 回复 2018-08-06
  • 1 回答
  • 0 关注
  • 411 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信