C# 构造函数的问题

classC1{publicstaticinta=1;staticC1(){a+=2;}publicC1(){a+=3;}}C1a=newC1();C1b=newC1()... class C1
{
public static int a = 1;
static C1()
{
a += 2;
}
public C1()
{
a += 3;
}
}

C1 a = new C1();
C1 b = new C1();
Console.WriteLine(C1.a);

为什么输出是9?
展开
 我来答
帐号已注销
2016-07-15
知道答主
回答量:10
采纳率:0%
帮助的人:11.4万
展开全部

使用static 修饰的属性、方法在其所属类初始化之前就会执行,并且只执行一次。在程序开始执行时,类C1中的执行过程是:

  1. 为静态成员a赋初始值为1

  2. 执行静态方法C1,将静态成员a的值增加2,变为了3

在执行代码C1 a = new C1();来实例化类C1时,执行其构造函数public C1(),将其静态成员a的值增加3,变为了6;

同样的,在执行代码C1 b = new C1();来实例化类C1时,执行其构造函数public C1(),将其静态成员a的值增加3,变为了9。

所以,在最后输出时,a的值就是9。

匿名用户
2016-07-15
展开全部
a = 1
public C1()//a = a+3
static C1()// a = Sub C1() + 2

C1 a1 = new C1();//a1=【"public"[a=1+3=4],"static"[a=(4+3)+2=9]】
C1 b2 = new C1();//b2= new number "9"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式