2014-09-23 74 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