3

可能重复:
为什么不能在嵌套的局部范围内声明重复的变量名?

我是 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# 中有这样的设计限制有什么奥秘吗?

4

0 回答 0