作者:MeteorSeed
出处:博客园
C#把声明为类型级的变量看作字段,而把在方法中声明的变量看作局部变量。
using System;
namespace Holiday.Program
{
publicclass Field
{
staticint i=1;
publicstaticvoid Main(string [] args)
{
int i=2;
Console.WriteLine(i);
Console.WriteLine(Field.i);
Console.ReadKey();
}
}
}
此时编译器允许声明第二个变量。
这段代码问了很多同事,都认为会在编译阶段报错(包括我自己)但实际上,这段代码的运行效果如下:
在某些情况下,允许声明名称相同、作用域相同的两个变量。原因是C#在变量之间有一个基本的区分,它把声明为类型级的变量看做字段,把在方法中声明的变量看做局部变量。即使在Main方法的作用域内声明了2个变量i,这段代码也会编译。在Main方法中声明的i隐藏了同名类级别变量,所以在运行这段代码时首先输出的是2。