为什么 C# 允许变量作用域在整个块中扩展而不管声明顺序如何? (书籍参考:C#10 in a Nutshell 作者:Joseph Albahari)

问题描述 投票:0回答:1

我正在读 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 并在线寻找解释,但尚未找到澄清。有人可以解释一下这是什么意思吗?任何对此范围行为及其影响的见解将不胜感激!

c# asp.net .net variables scope
1个回答
0
投票

{ }
对包含一个新的“范围”,即某个变量有效的块。

两个

y
都在同级作用域中声明。他们不会互相干扰。而且它们在父作用域中不可用 - 这就是 Console.WriteLine 失败的原因。

但是,一个

x
是在“父”范围中定义的,另一个是在子范围中定义的。该子声明与父作用域中声明的声明冲突。当您将“父级”
int x
移动到块的末尾时,甚至会出现这种情况,即使之前使用它是无效的。

© www.soinside.com 2019 - 2024. All rights reserved.