class Program 
    { 
        int a = 10; //第一次定义a         static void Main(string[] args) 
        { 
            int a = 20;                 //第二次定义a
            Console.WriteLine(a);       // 此处输出第二次定义的a:20 
            Console.WriteLine(this.a);  // 此处输出第一次定义的a:10 
             
            //下面是一个代码块 
            { 
                int a = 30;   //第三次定义a
                // 编译器错误 CS0136:变量声明隐藏了本应在范围内的另一个声明
                // 第三次定义的a掩盖了第二次定义的a,所以出现编译器错误。
            }         } 
    } 

解决方案 »

  1.   

    除非你把 int a = 20; //第二次定义a 也用括号扩起来,不然a就是main里的全作用域
      

  2.   

    //我记得,在C#当中,代码块也是有作用域的啊?
    但是第二个a的作用域包含第三个的,
    比如这样就可以重复定义了://代码块1

        int a = 30; //第三次定义a 
    } //代码块2 

        int a = 30; //第三次定义a 
      

  3.   

    class Program 
        { 
            int a = 10; //第一次定义a         static void Main(string[] args) 
            { 
                int a = 20;                 //第二次定义a
                Console.WriteLine(a);       // 此处输出第二次定义的a:20 
                Console.WriteLine(this.a);  // 此处输出第一次定义的a:10 
                 
                //下面是一个代码块 
                { 
                    int a = 30;   //第三次定义a
                    // 编译器错误 CS0136:变量声明隐藏了本应在范围内的另一个声明
                    // 第三次定义的a掩盖了第二次定义的a,所以出现编译器错误。
                }         } 
        } 
      

  4.   

    一个语句块内不能重复定义两次变量,静态变量不能用this来引用的