程序中可访问特定变量的部分称为该变量的范围。可以在类,方法,循环等中定义变量。在C / C++中,所有标识符都在词法(或静态)范围内,即,变量的范围可以在编译时确定,并且与函数调用堆栈无关。但是C#程序是以类的形式组织的。
因此,变量的C#范围规则可以分为以下三类:
- 班级范围
- 方法级别范围
- 块级范围
班级范围
- 在类中但在任何方法之外声明变量都可以在类中的任何位置直接访问。
- 这些变量也称为字段或类成员。
- 类级别的范围变量可以由声明它的类的非静态方法访问。
- 类级别变量的访问修饰符不会影响它们在类中的作用域。
- 成员变量也可以通过使用access修饰符在类外部进行访问。
例子:
// C# program to illustrate the
// Class Level Scope of variables
using System;
// declaring a Class
class GFG { // from here class level scope starts
// this is a class level variable
// having class level scope
int a = 10;
// declaring a method
public void display()
{
// accessing class level variable
Console.WriteLine(a);
} // here method ends
} // here class level scope ends
方法级别范围
- 在方法内部声明的变量具有方法级别范围。这些在方法之外无法访问。
- 但是,这些变量可以由方法中的嵌套代码块访问。
- 这些变量称为局部变量。
- 如果在同一作用域中用相同的名称声明两次这些变量,则会出现编译时错误。
- 这些变量在方法执行结束后不存在。
例子:
// C# program to illustrate the
// Method Level Scope of variables
using System;
// declaring a Class
class GFG { // from here class level scope starts
// declaring a method
public void display()
{ // from here method level scope starts
// this variable has
// method level scope
int m = 47;
// accessing method level variable
Console.WriteLine(m);
} // here method level scope ends
// declaring a method
public void display1()
{ // from here method level scope starts
// it will give compile time error as
// you are trying to access the local
// variable of method display()
Console.WriteLine(m);
} // here method level scope ends
} // here class level scope ends
块级范围
- 这些变量通常在for,while语句等内部声明。
- 这些变量也被称为循环变量或语句变量,因为它们将范围限制在声明它的语句的主体之内。
- 通常,方法内部的循环具有三个嵌套代码块级别(即类级别,方法级别,循环级别)。
- 在循环外部声明的变量也可以在嵌套循环中访问。这意味着方法和所有循环都可以访问类级别的变量。方法级别变量将可以在该方法内部循环和访问。
- 在循环体内声明的变量对循环体外不可见。
例子:
// C# code to illustrate the Block
// Level scope of variables
using System;
// declaring a Class
class GFG
{ // from here class level scope starts
// declaring a method
public void display()
{ // from here method level scope starts
// this variable has
// method level scope
int i = 0;
for (i = 0; i < 4; i++) {
// accessing method level variable
Console.WriteLine(i);
}
// here j is block level variable
// it is only accessible inside
// this for loop
for (int j = 0; j < 5; j++) {
// accessing block level variable
Console.WriteLine(j);
}
// this will give error as block level
// variable can't be accessed outside
// the block
Console.WriteLine(j);
} // here method level scope ends
} // here class level scope ends