可能重复:
为什么不能在嵌套的局部范围内声明重复的变量名?
我是 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;
}
}
}
根据引用 p 创建类 Program 的第二个实例的代码的第 24 行会产生编译时错误。而完全相同的代码在 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# 中有这样的设计限制有什么奥秘吗?