C#:为什么作用域对象不能有相同的名字?

时间:2012-06-01 03:21:43

标签: c#

  

可能重复:
  Why can't a duplicate variable name be declared in a nested local scope?

我是C#的新手,最近注意到在两个不同的范围内声明时,C#中的范围对象不能与Java中的名称相同。为什么要设置此设计限制?有任何想法吗?例如。以下代码不适用于C#,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        private string Name = "";
        public Program(string Name)
        {
            this.Name = Name;
        }

        public static void Main(string[] args)
        {
            bool flag = true;
            if (flag)
            {
                Program p = new Program("");
                return;
            }

            Program p = new Program("");
            return;
        }
    }
}

代码的第24行,其中以引用p的形式创建类Program的第二个实例会产生编译时错误。尽管完全相同的代码在Java中运行没有任何问题,

public final class Test {
    private String Name = "";
    public Test (String Name) {
        this.Name = Name;
    }

    public static void main(String[] args) {
        boolean flag = true;
        if (flag)
        {
            Test t = new Test("");
            return;
        }

        Test t = new Test("");
        return;
    }
}

如果我记得我的编译器类:因为内部嵌套作用域的控制流(在if循环中)与其下面的main部分无关,所以允许用户使用相同的变量名引用(由Java编译器完成)。它不应该是编译时错误。那么C#中有一个神秘的设计限制吗?

0 个答案:

没有答案