繁体   English   中英

在我的方法中包含一个块是什么意思?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM