为何全局int变量可执行++操作,普通局部int变量却无法执行?
问题解答
先看示例代码:
public static int number; static void Main() { int number2; number++; number2++; }
核心原因在于C#对不同作用域变量的初始化规则差异:
- 静态字段
number:它属于类的成员变量,C#规定所有类级别的成员(静态字段、实例字段)会被CLR自动初始化为对应类型的默认值。int类型的默认值是0,所以number在使用前已经有合法值0,执行number++本质是对0做自增操作,完全符合语法要求。 - 局部变量
number2:方法内部声明的局部变量不会被自动初始化,C#强制要求局部变量必须在使用前显式赋值。此时number2处于未初始化状态,没有确定的内存值,执行number2++相当于对一个无合法值的变量进行操作,编译器会直接抛出错误阻止这种不安全的行为。
简单总结:类成员变量会被自动赋予默认值,局部变量必须手动赋值后才能使用。
内容的提问来源于stack exchange,提问作者Tayy
相关产品推荐
相关产品推荐

