具有相同名称的类和方法变量的行为

Sta*_*hil 2 c#

早些时候我遇到了一个问题,我在C#中发现了一些奇怪的行为.

这会抛出一个错误:

 public class MyClass
 {
    public int MyMethod()
    {
        for(int x = 0; x < 1; x++)
        {
           for(int x = 0; x < 1; x++)
           {
           }
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

但这不会:

public class MyClass
{
    public int x = 0;
    public int MyMethod()
    {
        for(int x = 0; x < 1; x++)
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

相反,当循环结束时,x将被设置回0.如果你有一个int x和一个,这也将起作用bool x.

为什么这样做?

Tet*_*Oni 7

在第一种情况下,您在同一范围内定义相同的变量,两次,这是一个错误.

在第二种情况下,您将在循环范围内定义局部变量,这将隐藏该x范围内的类成员.在该范围之外,x将引用类成员,但在其内部将引用循环迭代变量.