变量作用域是指变量在代码的特定部分的可访问性。
在 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