可能重复:
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#中有一个神秘的设计限制吗?