MST

星途 面试题库

面试题:C#中局部变量和成员变量的作用域与生命周期区别

请详细阐述C#中局部变量和成员变量在作用域与生命周期方面的区别,并举例说明。
28.6万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

作用域区别

  1. 局部变量
    • 局部变量的作用域仅限于声明它的代码块(例如方法体、循环体等)。一旦代码执行离开该代码块,局部变量就无法再被访问。
    • 示例:
class Program
{
    static void Main()
    {
        {
            int localVar = 10; // 局部变量localVar
            Console.WriteLine(localVar);
        }
        // 这里无法访问localVar,因为已离开其作用域
    }
}
  1. 成员变量
    • 成员变量分为实例成员变量和静态成员变量。实例成员变量的作用域是整个类,在类的任何实例方法中都可以访问。静态成员变量的作用域也是整个类,通过类名即可访问,在类的任何静态或实例方法中都可访问。
    • 示例:
class MyClass
{
    int instanceVar; // 实例成员变量
    static int staticVar; // 静态成员变量

    void InstanceMethod()
    {
        instanceVar = 20;
        staticVar = 30;
    }

    static void StaticMethod()
    {
        staticVar = 40;
        // 这里不能直接访问instanceVar,因为StaticMethod是静态方法
    }
}

生命周期区别

  1. 局部变量
    • 局部变量在进入其声明所在的代码块时创建,当代码执行离开该代码块时,局部变量就会被销毁(从栈中移除,对于值类型)。对于引用类型的局部变量,当离开作用域时,它不再被引用,如果没有其他引用指向该对象,垃圾回收器会在适当的时候回收该对象所占用的内存。
    • 示例:
class Program
{
    static void Main()
    {
        void InnerMethod()
        {
            int localVar = 10; // 局部变量localVar创建
            Console.WriteLine(localVar);
        }
        InnerMethod();
        // 此时localVar已被销毁
    }
}
  1. 成员变量
    • 实例成员变量:随着类的实例(对象)的创建而创建,其生命周期与对象的生命周期相同。当对象被垃圾回收器回收时,实例成员变量占用的内存才会被释放。
    • 静态成员变量:在类第一次被加载到内存时创建,其生命周期贯穿整个应用程序的运行期间,直到应用程序域被卸载才会被销毁。
    • 示例:
class MyClass
{
    int instanceVar; // 实例成员变量
    static int staticVar; // 静态成员变量

    public MyClass()
    {
        instanceVar = 1; // 实例创建时,实例成员变量初始化
    }

    static MyClass()
    {
        staticVar = 10; // 类第一次加载时,静态成员变量初始化
    }
}