【发布时间】:2010-07-30 15:02:16
【问题描述】:
考虑以下代码示例:
// line #
{ // 1
// 2
{ // 3
double test = 0; // 4
} // 5
// 6
double test = 0; // 7
} // 8
这给出了错误
不能在此范围内声明名为“test”的局部变量,因为它会给“test”赋予不同的含义,而“test”已在“子”范围中用于表示其他内容
但我不明白为什么?外部 test 变量从第 7 行开始,而不是在第 2 行,那么在第 4 行声明第二个变量 test 并在第 5 行结束的问题在哪里?
【问题讨论】:
-
错误信息几乎说明了一切。语言设计者这样做是为了鼓励人们在作用域块内使用不同的变量名以避免混淆,即使他们本可以更紧密地编写作用域。因此,子作用域中的变量必须具有唯一的命名。
-
这是我认为 .NET 各个部分设计中“成功之坑”理念的一个例子(参考 blogs.msdn.com/b/brada/archive/2003/10/02/50420.aspx)