guo*_*guo 4 c# language-design
在方法中,只能有一个任何给定名称的对象.在前面的示例中,我们使用循环控制变量的块级别范围重用相同的变量名称,但是,在块范围之外的同名对象将显示为什么不起作用.请参阅此示例以显示此命名冲突:
public static void DoWork()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
int i = 777; // Compiler error here
Console.WriteLine(i);
}
Run Code Online (Sandbox Code Playgroud)
以上是https://www.microsoft.com/net/tutorials/csharp/getting-started/scope-accessibility,我想问为什么会发生这种情况?为什么c#的设计是这样的,因为C++和Java没有这样的东西.(我已经测试过,在Java和C++中没有限制)
根据Eric Lippert的说法,这个设计选择是为了
防止代码的读者/维护者被欺骗的类错误,他们认为他们指的是一个名称简单的实体,但实际上是在意外地完全引用另一个实体.
当你重构时,这种事情会特别让你感到困惑,而看似无辜的变化可以完全改变代码的含义.