示例1:
usingSystem; namespacegosoa.com { class MyFirstClass { static void Main() { int j=5; for(int i=0;i<10;i++) { int j=20; Console.WriteLine(i+j); } } } }
这段代码编译就会出错,因为第一个j 在作用域是整个Main()方法,这样,其在循环体内也
是有效的 。于是,在循环体内定义一个同名的j 时,就会报错了。
示例2:
using System; namespace gosoa.com { class MyFirstClass { int j=30; static void Main() { int j=20; int i=5; Console.WriteLine(i+j); } } }
在这段代码中,第一个j 的作用域是整个类,也就是类的字段,第二个j 的声明会替代第一
个j,所以该 程序会输出25.
问题是:都是局部变量的冲突,为什么第一个编译报错,第二个不报错反而替代? |