C# 中,作用域(Scope)决定了变量、常量、方法等标识符在代码中的可见性和生命周期。理解作用域有助于避免变量命名冲突和访问错误。合理使用访问修饰符可以控制类成员的可见性,提高代码的封装性和安全性。注意局部变量的生命周期,避免在超出其作用域的地方访问它们。本文主要介绍一下C# 作用域。

1、方法作用域

直接在方法内部声明的变量,在声明之后的位置,方法内部都可以使用:

例如:

public class Program {
  public static void Main(string[] args) {
    int x = 100;
    Console.WriteLine(x);
  }
}

2、块作用域

代码块是指引用大括号{}之间的所有代码。在代码块中声明的变量只能在声明变量行后面的花括号之间的代码中访问:

例如:

public class Program {
  public static void Main(string[] args) {
      // 这里的代码不能使用x
    
    { // 代码块

      // 这里的代码不能使用x
      int x = 100;
      // 这里的代码可以使用x
      Console.WriteLine(x);

   } // 代码块的结束

     // 这里的代码不能使用x

  }
}

代码块可以单独存在,也可以属于ifwhilefor语句。 对于for语句,在语句本身中声明的变量,也可以在块的作用域内使用。

3、类作用域

类级别的变量(字段)可以在整个类的所有方法中访问。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
      
        int classLevelVar = 42; // 作用域是整个类
    
        void ShowValue()
        {
            Console.WriteLine(classLevelVar); // ✅ 访问类变量
        }
    
        void AnotherMethod()
        {
            Console.WriteLine(classLevelVar); // ✅ 访问类变量
        }
        
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Console.ReadKey();
        }
    }
}

4、命名空间作用域

在 同一命名空间内,可以访问命名空间内的所有类、接口、结构等。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class ClassA
    {
        public static void PrintMessage() => Console.WriteLine("Hello from ClassA");
    }

    class ClassB
    {
        void CallClassA()
        {
            ClassA.PrintMessage(); // ✅ 访问同一命名空间下的类
        }
    }
    
    class Program
    {
      
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Console.ReadKey();
        }
    }
}

5、全局作用域(Global Scope, C# 10+)

C# 10 及以上版本中,可以使用 global using 定义全局 using 指令,使整个项目都可以访问。

// 在任何 .cs 文件中
global using System;//整个项目都能访问

namespace ConsoleApplication
{
    class Program
    {
      
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Console.ReadKey();
        }
    }
}

推荐文档