变量的作用域是什么?
变量的作用域指的是能够使用该变量的区域。作用域既作用于方法,也作用于变量。一个标识符的作用域是从声明该标识符的那个位置开始的,不管是变量还是方法都应如此。在C#中通常用“{”和“}”来界定变量的作用范围。变量的作用域有着严格的要求,在声明变量时需要时刻记住两点:①变量名不要重复②声明变量的位置很重要。先来看一个正常的例子:
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 5; i++)
{
int s = 12;
Console.WriteLine(s);
}
Console.ReadKey();
}
}
这个代码没有任何毛病,在for循环内声明的变量s,在每次循环时都会被输出。但这个变量s在for循环外则并不能访问到。尝试着在for循环的下面加一句Console.WriteLine(s);会发现并没有代码智能补全,如果强行写一个s,则会报红线错误。因为变量s在for循环内部声明,所以只能在for循环内部访问。实际上那个for循环内的变量i也是如此。如果要让变量s在for循环外面也能访问,那么一开始就要在for循环外声明好变量s,比如下面代码:
class Program
{
static void Main(string[] args)
{
int s = 0;
for (int i = 0; i < 5; i++)
{
s = 12;
Console.WriteLine(s);
}
Console.WriteLine(s);
Console.ReadKey();
}
}
这样运行则不会出现错误。但还需要注意两个细节,
细节1:在for循环外声明变量s后,如果认为“既然在for循环内声明的变量只有在for循环内有效,那么我是否可以在for循环内再写一个int s = 12;”,这样做肯定是错误的。即便作用域不一样,但也无法让for循环内外声明的变量名出现相同的情况。
细节2:如果在for循环外声明变量s时没有赋初值,比如上面代码的int s = 0;改成int s;那么虽然在for循环内部给变量s赋值了,然而走出for循环后无法执行Console.WriteLine(s);可以发现这里的s报红线错误了,所以如果要在for循环结构外部使用到这个变量,还是应该在开始就给变量赋初值。