因为一个重名,让我拔掉了放着音乐的耳机,静静地倒腾了一个多小时,哎……上程序
class Program
{
static int[] location = { 0, 0 };
static void Main(string[] args)
{
int[] location = {0,0}; //当初并没发现还定义了一个局部变量location
location[0] += 8;
Draw();
Console.ReadKey();
}
static void Draw()
{
Console.WriteLine(location[0]);
}
}
我没发现Main()中的location变量,所以在一进入Draw()方法时,原本location[0] += 8;应该变成8,但一进入Draw()location[0]会立即变为0,当时在调试时看到这一步直接傻眼了,还以为vs出了问题呢……
在发现Main()中还定义了一个重名的局部变量后,便开始考虑是否是这个重名惹的祸……
百度查之,当局部变量同全局变量重名时,在定义这个重名的局部变量的方法内,是这个局部变量在起作用,但当一出这个方法,便会是到了全局变量的天下,此时,那个局部变量会失效,再调用这个名字的变量时,便是调用的是全局变量。
比如本程序,为何一进入Draw()后,location[0]便会变为0?因为在Main()中加8的那个是局部变量,而出了Main(),局部变量便失效,该是全局变量location的天下了。这时全局变量location[0]的初始值还是0,所以才会变为0……
想了想,还是变量作用域的问题,基础啊……基础……哎……
对了,这里的Main()之外类里面的location数组,是叫全局变量还就是一个字段呀,给我留言……