C# 变量作用域

变量作用域是指变量在代码的特定部分的可访问性。

在 C# 中,变量有三种作用域类型:

  • 类级别作用域
  • 方法级别作用域
  • 块级别作用域

C# 类级别变量作用域

在 C# 中,当我们在类中声明一个变量时,该变量可以在类内部访问。这被称为类级别变量作用域

类级别变量也称为字段,它们在类的方法、构造函数和块之外声明。例如:

using System;
namespace VariableScope {
  class Program {

    // class level variable
    string str = "Class Level";

    public void display() {
      Console.WriteLine(str);
    }

    static void Main(string[] args) {
      Program ps = new Program();
      ps.display();

      Console.ReadLine();
    }
  }
}

输出

Class Level

在上面的示例中,我们在 Program 类内部初始化了一个名为 str 的变量。

由于它是类级别变量,我们可以从类内部的方法中访问它。

public void display() {
  Console.WriteLine(str);
}

这是因为类级别变量在整个类中都是可访问的。

注意:我们无法通过静态方法访问类级别变量。例如,假设我们在 Program 类中有一个静态方法。

static void display2() {

  // Access class level variable
  // Cause an Error
  Console.WriteLine(str);
}

方法级别变量作用域

当我们在方法中声明一个变量时,该变量不能在方法外部访问。这被称为方法级别变量作用域。例如:

using System;

namespace VariableScope {
  class Program {

    public void method1() {
      // display variable inside method
      string str = "method level";
    }

    public void method2() {

      // accessing str from method2()
      Console.WriteLine(str);
    }

    static void Main(string[] args) {
      Program ps = new Program();
      ps.method2();

      Console.ReadLine();
    }
  }
}

在上面的示例中,我们在 method1() 中创建了一个名为 str 的变量。

// Inside method1()
string str = "method level";

这里,str 是一个方法级别变量。因此,它不能在 method1() 外部访问。

但是,当我们尝试从 method2() 访问 str 变量时,

// Inside method2
Console.WriteLine(str);  // Error code

我们会收到一个错误。

Error   CS0103     The name 'str' does not exist in the current context  

这是因为方法级别变量的作用域仅限于其创建的方法内部。例如:

using System;
namespace VariableScope {
  class Program {

    public void display() {
     string str = "inside method";

      // accessing method level variable
      Console.WriteLine(str);
    }

    static void Main(string[] args) {
    Program ps = new Program();
    ps.display();

    Console.ReadLine();
    }
  }
}

输出

inside method

在这里,我们在 display() 方法中创建了 str 变量并进行了访问。因此,代码可以正常运行,不会出现任何错误。


C# 中的块级别变量作用域

当我们在块(for 循环while 循环if..else)中声明一个变量时,该变量只能在该块内访问。这被称为块级别变量作用域。例如:

using System;

namespace VariableScope {
  class Program {
    public void display() {

      for(int i=0;i<=3;i++) {
        	 
      }
    Console.WriteLine(i);
    }

    static void Main(string[] args) {
      Program ps = new Program();
      ps.display();

      Console.ReadLine();
    }
  }
}

在上面的程序中,我们在 for 循环内部初始化了一个块级别变量 i

for(int i=0;i<=3;i++) {
       	 
}

由于 i 是一个块级别变量,当我们尝试在 for 循环外部访问该变量时,

// Outside for loop
Console.WriteLine(i);

我们会收到一个错误。

Error	 CS0103  The name 'i' does not exist in the current context
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战