2014-09-23 79 views
3

有时我看到这样实际上不知道它的含义如下代码:代码块

void myFunc() { 
    MyClass a = new MyClass(); 

    { 
     if (a.b == null) // doSomething 
    } 
} 

我真的很喜欢这种代码排序和封装(不仅是因为你可以折叠整个如果你没有阅读它的内容,请立即封锁),但是我想知道它是否对光学缩进还有其他任何语法意义。 OFC。我知道,就像在每个代码块中,块中声明的任何变量都只能在那里使用,但是还有更多。还有对象初始化器,但是对于一个类的实际实例来说,上面是一个完全独立的块。

+4

据我所知,“空闲”块的唯一语法含义是范围变量。 – Jodrell 2014-09-23 07:37:24

+0

还没有真正看到这个......有趣的是... – Noctis 2014-09-23 07:37:37

+0

从你提到自己的范围之外 - 应该没有其他的意义 – 2014-09-23 07:37:47

回答

0

8.2节阅读完整的规格为他们构建像一个你描述

void myFunc() { 
    MyClass a = new MyClass(); 

    { 
     if (a.b == null) // doSomething 
    } 
} 

主要用于你为什么喜欢他们同样的事情。只是出于光学原因,能够折叠这些部件。它们也可以用于变量范围,但这比其他用途更少使用。

一个可能的替代方案(仅考虑光学原因)将是使用区域来达到相同的结果。虽然它的缺点是你不得不多写一个{},但你可以声明代码部分是关于什么的。

void myFunc() { 
    MyClass a = new MyClass(); 

    #region Setting the players base stats 
     if (a.b == null) // doSomething 
    #endregion 
} 

这种做法无助于变量范围,但给你至少有一些想法它是什么,被未显示(如果该区域处于折叠状态)。同样,这两种方法都可以组合(因此区域内的{},以便您可以封装变量)。

void myFunc() { 
    MyClass a = new MyClass(); 

    #region Setting the players base stats 
    { 
     if (a.b == null) // doSomething 
    } 
    #endregion 
} 

但是回到你的问题,除了光学原因和变量的范围,没有语法理由来做到这一点。

3

我不知道是否有任何语法意义的附加只是光压痕

没有,有没有什么特别的他们。 C#语言将块声明为封装可选语句列表的一对大括号,并且注意到这允许将多个语句写入允许单个语句的地方。

这反过来简化了语言规范的其他部分,例如iffor等,然后可以将它们指定为只有后面跟着一条语句。

事实上,这意味着你也可以在任何其他地方使用它们大多是一个快乐的事故。

您可以的C# language spec

+0

很高兴知道如果if和所有其他部分在幕后工作 – HimBromBeere 2014-09-23 07:56:32