我正在读 Joseph Albahari OReilly 写的一本名为《C#10 in a Nutshell》的书。在描述局部变量时,书上是这么说的:
int x;
{
int y;
int x; // Error - x already defined
}
{
int y; // OK - y not in scope
}
Console.Write (y); // Error - y is out of scope
“变量的作用域在其整个代码块中向两个方向延伸。这意味着,如果我们将本示例中 x 的初始声明移至方法的底部,我们会得到相同的错误。这与 C++ 和考虑到在声明之前引用变量或常量是不合法的,这有点奇怪。” - C#10 简述第 2 章
我已经尝试过 ChatGPTing 并在线寻找解释,但尚未找到澄清。有人可以解释一下这是什么意思吗?任何对此范围行为及其影响的见解将不胜感激!
{ }
对包含一个新的“范围”,即某个变量有效的块。
两个
y
都在同级作用域中声明。他们不会互相干扰。而且它们在父作用域中不可用 - 这就是 Console.WriteLine 失败的原因。
但是,一个
x
是在“父”范围中定义的,另一个是在子范围中定义的。该子声明与父作用域中声明的声明冲突。当您将“父级”int x
移动到块的末尾时,甚至会出现这种情况,即使之前使用它是无效的。