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

时间:2013-10-16 20:09:42

标签: c#

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

这将引发错误:

 public class MyClass
 {
    public int MyMethod()
    {
        for(int x = 0; x < 1; x++)
        {
           for(int x = 0; x < 1; x++)
           {
           }
        }
    }
 }

但这不会:

public class MyClass
{
    public int x = 0;
    public int MyMethod()
    {
        for(int x = 0; x < 1; x++)
        {
        }
    }
}

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

为什么这样做?

1 个答案:

答案 0 :(得分:7)

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

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