一个奇怪的C#静态变量问题 class Class1{public static int Count = 0;static Class1(){Count++;}public Class1(){Count++;}}Class1 o1 = new Class1();Class1 o2 = new Class1();请问,Class1.Count的值是多少?( )1. 12. 23. 34. 4 答案是3,谁解释一下为什么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 静态构造函数是C#的新特性用处并不广用于初始化静态变量静态构造函数是属于类的,而不属于任何一个实例,所以这个构造函数只会被执行一次,而且是在创建此类的第一个实例或引用任何静态成员之前,由.NET自动调用然后创建两个对象时分别++就得到三了!大概是这道理,不知道对不对! Class1 o1 = new Class1();Class1 o2 = new Class1();调用public Class1()两次,Count =2;Class1.Count时引用static Class1(),所以Count =3; 态构造函数只执行一次Class1 o1 = new Class1(); Class1 o2 = new Class1(); 然后创建两个对象时分别++ 调用public Class1()两次,Count =2; Class1.Count时引用static Class1(),所以Count =3; 创建两个实例后为2,调用Class1.Count ()时,会调用Class1中静态构造,所以这是为3。 static构造函数 +1new 构造两次 +2= 3 感觉楼上的某些说法是错误:在第一次构造的时候,静态变量要先被初始化,所以静态构造函数要被先调用一次,然后是正常的构造函数被调用一次,所以在执行Class1 o1 = new Class1(); 后count已经是2了,然后在执行Class1 o2 = new Class1(); 后count就会变为3。第二次静态构造函数是不会被调用的。至于楼上所说的什么调用Class1.Count时会变为3简直是笑话。但到我调用Class1.Count一万次就要变成一万吗? 关于.net平台安装的问题 读取oracle大字段。 C#写好的类,一个dll文件,如何修改可以被别的代码入vb引用 用C#。能写一个通用的SQL查询,插入,更新的类吗? 使用Ftplib.Ftp不能上传,出现550错误 C# datagridview 垂直滚动条问题 C#如何获取多个物理驱动器的型号和编号??? C# winform窗体中嵌入外部命令行窗口 怎么用正则表达式表示 两位数字的 所以匹配? WINDOWS服务启动应用程序看不到界面 求c#做GPRS的程序学习 求一个思路或例子--工序流程的表示
静态构造函数是属于类的,而不属于任何一个实例,所以这个构造函数只会被执行一次,而且是在创建此类的第一个实例或引用任何静态成员之前,由.NET自动调用
然后创建两个对象时分别++
就得到三了!
大概是这道理,不知道对不对!
Class1 o2 = new Class1();
调用public Class1()两次,Count =2;
Class1.Count时引用static Class1(),所以Count =3;
Class1 o1 = new Class1();
Class1 o2 = new Class1();
然后创建两个对象时分别++
调用public Class1()两次,Count =2;
Class1.Count时引用static Class1(),所以Count =3;
调用Class1.Count ()时,
会调用Class1中静态构造,
所以这是为3。
new 构造两次 +2= 3
在第一次构造的时候,静态变量要先被初始化,所以静态构造函数要被先调用一次,然后是正常的构造函数被调用一次,所以在执行Class1 o1 = new Class1(); 后count已经是2了,
然后在执行Class1 o2 = new Class1(); 后count就会变为3。第二次静态构造函数是不会被调用的。至于楼上所说的什么调用Class1.Count时会变为3简直是笑话。但到我调用Class1.Count一万次就要变成一万吗?