[英]What does it mean to have a block inside my method?
我以前有以下代码:
public class Program
{
public static void Main(string[] args)
{
int i = 0;
while(condition)
{
.........
.........
if (condition)
{
i = 6;
Console.WriteLine("Inside Block :" +i);
}
else
{
i = 7;
Console.WriteLine("After block : " + i);
}
}
}
}
后来,我发现我不需要任何条件,并且希望每次将6赋给变量i
。 所以我注释掉了代码,但是这样做我犯了一个愚蠢的错误,所以现在我的代码如下:
公共课程计划{
public static void Main(string[] args)
{
int i = 0;
while(condition)
{
.........
.........
// a block without condition
{
i = 6;
Console.WriteLine("Inside Block :" +i);
}
}
}
}
如您所见,错误地我只是用if
条件注释掉/删除了该行,却忘记了删除这些块。现在,这个块在这里意味着什么。 无论如何我都会每次执行它,但是为什么编译时没有给出任何错误呢?
我们在这里有什么术语/概念吗? 我知道Java
Initializer Block
,但这不是这里发生的情况。 它在Multi-Threading
环境中是否会有所不同?
任何信息都将非常有帮助。
为什么在编译时没有给出任何错误?
我们在这里有什么术语/概念吗?
因为C#允许您这样做。 C#语言规范第1.5节:
块允许在允许单个语句的上下文中编写多个语句。 一个块由在定界符
{
和}
之间编写的语句列表组成。
因此,实际上,您熟悉的if语句和while语句仅需在其标题之后添加一个语句,并且由于在允许单个语句的位置都允许使用块,因此您可以在其中编写一个块。
这些没有任何标题的块的工作原理与其他任何块一样。 他们创建了一个新的范围。 在块中声明的变量不能在块外访问。
基本上,当您放置{}
块(也称为作用域)时,它定义了代码执行的边界。
public static void Main(string[] args)
{
int i = 0;
while(condition)
{
.........
.........
// a block without condition
{
i = 6;
Console.WriteLine("Inside Block :" +i);
}
}
}
}
由于您的变量i
是在方法级别定义的,因此它对您的代码没有任何重大影响。
假设您在该作用域内定义了一个变量,并尝试在外部访问它,这将产生错误,因为在作用域内定义的任何变量都具有作用域边界的限制。
例如。
public static void Main(string[] args)
{
int i = 0;
while(condition)
{
.........
.........
// a block without condition
{
int j = 44;
i = 6;
Console.WriteLine("Inside Block :" +i);
}
}
Console.WriteLine(j); // <------------------ This would generate error.
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.