c# - 字段和局部变量的范围冲突

标签 c# scope

请参阅下面的代码片段

class scopes
{
  static int j=20;
  Console.WriteLine(j);
    public static void Main()
   {
       int j=30;
       Console.WriteLine(j);
       return;
   }
}

以上代码支持变量隐藏
看下面代码

public static int Main()
{
    int j = 20;
    for (int i=0; i < 10; i++)
    {
        int j = 30;    //can't do this
        Console.WriteLine(j + i);
    }
    return 0;
}

此处不支持上述代码变量隐藏。

这背后的原因是什么?

最佳答案

在第一种情况下,至少有一个定义的方法来消除两者之间的歧义,即 this. 前缀 - 在方法内部,this.j 是字段,其中-as j 是成员。至于为什么支持:推测,但可能这样向类添加一个字段(在 partial 类的情况下可能位于不同的代码文件中)不会' 导致随机方法开始抛出编译器错误。注意方法中j的in在添加字段j前后的含义是一样的。

在第二种情况下,这不是问题:添加局部变量只会影响单个局部方法,并且没有消歧语法(即我们指的是哪个 j),也没有风险意外损坏来自不相关的代码

关于c# - 字段和局部变量的范围冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13399185/

相关文章:

C# 按长度更改 txtBox BackColor

c# - 在VS2005中使用WPF需要安装什么软件

groovy - 为什么在 Groovy 闭包中设置的实例变量的值在其外部不可见?

c# - 使用 VS 的 Unity 工具在 VS 中调试 C# 时,所有变量都超出范围

c# - 快速清除 NHibernate 数据库

c# - AssemblyInfo.cs , .net 应用程序版本

c# - 从列表中选择值

c++ - 在 C 与 C++ 中使用函数调用初始化全局变量

c++ - 将一个 std::string 复制到另一个时出现段错误?

python - 在此示例中,名称 *open* 属于内置作用域还是全局作用域?