作用域区别
- 局部变量:
- 局部变量的作用域仅限于声明它的代码块(例如方法体、循环体等)。一旦代码执行离开该代码块,局部变量就无法再被访问。
- 示例:
class Program
{
static void Main()
{
{
int localVar = 10; // 局部变量localVar
Console.WriteLine(localVar);
}
// 这里无法访问localVar,因为已离开其作用域
}
}
- 成员变量:
- 成员变量分为实例成员变量和静态成员变量。实例成员变量的作用域是整个类,在类的任何实例方法中都可以访问。静态成员变量的作用域也是整个类,通过类名即可访问,在类的任何静态或实例方法中都可访问。
- 示例:
class MyClass
{
int instanceVar; // 实例成员变量
static int staticVar; // 静态成员变量
void InstanceMethod()
{
instanceVar = 20;
staticVar = 30;
}
static void StaticMethod()
{
staticVar = 40;
// 这里不能直接访问instanceVar,因为StaticMethod是静态方法
}
}
生命周期区别
- 局部变量:
- 局部变量在进入其声明所在的代码块时创建,当代码执行离开该代码块时,局部变量就会被销毁(从栈中移除,对于值类型)。对于引用类型的局部变量,当离开作用域时,它不再被引用,如果没有其他引用指向该对象,垃圾回收器会在适当的时候回收该对象所占用的内存。
- 示例:
class Program
{
static void Main()
{
void InnerMethod()
{
int localVar = 10; // 局部变量localVar创建
Console.WriteLine(localVar);
}
InnerMethod();
// 此时localVar已被销毁
}
}
- 成员变量:
- 实例成员变量:随着类的实例(对象)的创建而创建,其生命周期与对象的生命周期相同。当对象被垃圾回收器回收时,实例成员变量占用的内存才会被释放。
- 静态成员变量:在类第一次被加载到内存时创建,其生命周期贯穿整个应用程序的运行期间,直到应用程序域被卸载才会被销毁。
- 示例:
class MyClass
{
int instanceVar; // 实例成员变量
static int staticVar; // 静态成员变量
public MyClass()
{
instanceVar = 1; // 实例创建时,实例成员变量初始化
}
static MyClass()
{
staticVar = 10; // 类第一次加载时,静态成员变量初始化
}
}