关于全局变量没有初始化问题思考

-bootblack- 2016-03-21 10:50:35
namespace ConsoleApplication7
{
class Program
{
int a;
static void Main(string[] args)
{
int i;
for(i = 0; i < 5; i++)
{
a += 1;
}
Console.WriteLine("{0}", a);
}
}
}

这段代码在C#编译器下跑不通,小弟很费解.
编译器给出的错误是"要求对象引用".
小弟理解:因为小弟以前是写C的,我记得在C中,如果一个变量在函数体外定义(也就是全局变量),这里指变量a,那么如果只是进行声明,那么会隐式的进行初始化,并且初始化为0.
问题:是不是在C#中,针对全局变量,如果不进行显示初始化,是不是就是认为没有分配内存,不会给a赋值0?
...全文
730 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
一支糖包仔 2016-03-22
  • 打赏
  • 举报
回复
静态方法里面只能使用静态变量
江南小鱼 2016-03-22
  • 打赏
  • 举报
回复
1、静态方法,只能使用静态公有变量 2、静态变量、实例变量均可应用于实例方法 3、int变量会被初始化为0
cheng2005 2016-03-22
  • 打赏
  • 举报
回复
楼主你的C水平很高吗?看起来不太像呢... 如果你的C水平没那么高,请用C#的语法来考虑C#的问题。
为轮子而生 2016-03-22
  • 打赏
  • 举报
回复
没有什么自动变量,非静态的就是非静态的,不可能给静态函数使用。你非要一只“活”的手,那么它一定是属于一个“活”人的,不可能即是活的又是死的。 从没听说过写C或者C++的人会不了解这些东西,C比C#要求更严格。另外,C#也没有“全局”这个说法,任何对象都会有它的出处。
-bootblack- 2016-03-22
  • 打赏
  • 举报
回复
引用 3 楼 China_LY11 的回复:
静态方法里面只能使用静态变量
这个没道理吧 那我其中的int i不就属于自动变量?
yangyi_2009 2016-03-21
  • 打赏
  • 举报
回复
C# 没有什么所谓的“全局变量”,不知道你会不会 C++,a 在这里是一个字段(C++ 中叫成员变量)。 在 C# 中字段声明如果没有显式的赋值,会初始化为字段类型的默认值,对于 int 类型 来说 default(int) 就是 0。 另一方面,a 在这里是一个实例字段,Main 方法是一个静态方法(static 修饰的方法称为静态方法),实例成员应该通过实例来访问,比如 var p = new Program(); p.a += 1; 相当于 C 中的 p->a 这种写法。 在你的代码里,应该改为静态字段 static int a;
crystal_lz 2016-03-21
  • 打赏
  • 举报
回复
看来你以前写C的时候也不知道 静态与非静态的关系 static……

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧