聊城网站备案河南工程建设信息网官网 可登录中项网
一、变量基础
1. 声明与初始化
- 声明语法:<数据类型> <变量名>(如 int age; string name)
 - 初始化要求:
1、 类或结构体中的字段变量(全局变量)无需显式初始化,默认值为 0 或 null,
2、方法内的局部变量必须显式初始化后才能使用(否则编译报错) 
int globalVar;          // 合法(全局变量默认0)  
void MyMethod() {  int localVar = 10;  // 必须初始化  
}  
 
2. 类型推断
- var 关键字:编译器根据赋值自动推断变量类型(仅限局部变量)
 
var name = "Alice";  // 推断为 string  
var num = 3.14;      // 推断为 double  
 
二、变量作用域规则
1. 作用域类型
| 作用域类型 | 定义范围 | 示例场景 | 
|---|---|---|
| 块级作用域 | {} 包围的代码块(C# 7+) | if / for / 自定义代码块内部 | 
| 方法参数作用域 | 整个方法内可见 | 方法参数传递 | 
| 全局变量作用域 | 类或结构体级别 | 类字段、静态变量 | 
| 循环变量作用域 | 循环体内部 | for (int i=0; …) 中的 i | 
2. 核心规则
- 局部变量:仅在其声明的代码块内有效
 
{  int blockVar = 20;  Console.WriteLine(blockVar);  // 合法  
}  
// Console.WriteLine(blockVar);   // 报错:超出作用域  
 
- 全局变量:类或结构体内所有方法可访问
 
class MyClass {  int globalVar = 30;  void MethodA() => globalVar = 40;  void MethodB() => Console.WriteLine(globalVar);  
}  
 
- 静态变量:类级别作用域,通过类名访问
 
class MyClass {  static int staticVar = 100;  
}  
// 访问方式:MyClass.staticVar  
 
三、关键注意事项
1. 作用域冲突
- 局部变量与全局变量同名时,优先访问局部变量
 
int age = 30;  
void MyMethod() {  int age = 25;  Console.WriteLine(age);  // 输出25  
}  
 
2. 内存管理
- 栈内存:存放局部变量和参数,随代码块结束自动释放
 - 堆内存:存放对象和引用类型数据,由垃圾回收器(GC)管理
 
3. 跨作用域访问限制
 外层代码块无法访问内层代码块的变量
void OuterMethod() {  if (true) {  int innerVar = 10;  }  // Console.WriteLine(innerVar);  // 报错  
}  
 
四、最佳实践建议
- 最小作用域原则:变量应在其最小必要范围内声明,减少命名冲突风险
 - 避免全局滥用:全局变量易引发耦合问题,优先使用局部变量
 - 显式初始化:即使允许默认值,也建议为全局变量显式赋初值
 - 类型推断慎用:var 适用于类型名冗长或赋值表达式明确的场景(如 var list = new List())
 
总结
变量生命周期:  
全局变量 → 类生命周期  
静态变量 → 程序生命周期  
局部变量 → 代码块/方法执行周期  
