在这段代码中,第一个i的作用域是整个类,也就是类的字段,第二个i的声明会替代第一个i,所以该程序会输出56.
关于作用域的问题:
变量的作用域是指可以使用该变量的代码区域。
一般情况下,确定作用域有如下规则:
A、只要变量所属的类在某个作用域内,其字段(也叫做 成员变量)也在该作用域中。
B、局部变量存在于声明该变量的块语句或方法结束的大括号之前的作用域。
C、在for、 while 循环中声明的变量,只存在于该循环体内。
在变量使用中,可能产生命名冲突的情况,就像楼主这样的问题。
同样类似的问题还有:- static void Main()
- {
- for(int i=0;i<10;i++)
- {
- Console.WriteLine(i);
- }
- for(int i=0;i<20;i++)
- {
- Console.WriteLine(i);
- }
- }
复制代码 上述代码中,两个循环中都使用了i ,但都可以正常输出,因为每个i的作用域都在其对应的两个循环体内。
如果是下面这种情况,就要注意了:- static void Main()
- {
- int j=5;
- for(int i=0;i<10;i++)
- {
- int j=20;
- Console.WriteLine(i+j);
- }
- }
复制代码 这段代码编译就会出错,因为第一个j 在作用域是整个Main()方法,这样,其在循环体内也是有效的。于是,在循环体内定义一个同名的j时,就会报错了。
|