2010-09-20 71 views
4

爲什麼必須將行延續字符(_)作爲最後一行?有沒有技術原因,或者這是一個通常的微軟「功能」?爲什麼必須將VB.Net行延續字符作爲最後一行

在其他基本方言中,您可以在其後添加註釋,但不能在VB.net中添加註釋,所以我很好奇爲什麼微軟決定不允許在這些行上發表評論。

+1

使用vs 2010,不再需要續行。否則是的,它的一個可愛的功能。 – BlackICE 2010-09-20 02:25:14

+0

我知道它在2010年不是必需的,但這並不能真正回答我爲什麼微軟會這樣做的問題。 – Eugene 2010-09-20 02:38:22

+3

@David:即使在VS 2010中,您也無法在續行的末尾添加註釋。 – Heinzi 2010-09-20 09:15:55

回答

6

它必須烘焙到編譯器中,因爲反彙編的代碼看起來沒有什麼不同。看看下面的代碼:

Dim nameVar As String = "John" 
     MsgBox("Hello " & nameVar & _ 
       ". How are you?") 

MSIL在它看起來是這樣的:

IL_0000:NOP
IL_0001:ldstr 「約翰」
IL_0006:stloc.1
IL_0007:ldstr「你好「
IL_000c:ldloc.1
IL_000d:ldstr」。你好嗎?「
IL_0012:呼叫串[mscorlib程序] System.String ::的毗連(字符串,
串,
字符串)

現在沒有續行相同的代碼:

 Dim nameVar As String = "John" 
     MsgBox("Hello " & nameVar & ". How are you?") 

MSIL是相同的:

IL_0000:nop
IL_0001:ldstr「John」
IL_0006:stloc.1
IL_0007:ldstr「你好」
IL_000c:ldloc.1
IL_000d:ldstr「。你怎麼樣\「
IL_0012:電話串[mscorlib程序] System.String :: CONCAT(字符串,
串,
字符串)

所以這是一個 「?編譯器的功能,」 爲什麼這樣做這種方式在解釋關於VB.NET的任何東西時,你需要回顧一下經典的Visual Basic,許多原則和過程都只是簡單地向VB.NET提供了一個舒適的級別,並吸引了VB6和更早的程序員。爲什麼它在VB.NET中(2008年和之前)的方式可能是因爲它在VB6和更早的版本中是這樣的,並且我敢於猜測它是在VB6中以這種方式完成的,因爲在編譯代碼之前有IDE限制,但我們永遠不會知道,除非來自最初的VB6微軟團隊的人加入他們的推理。

希望這有助於!

+0

感謝您的徹底解答! – Eugene 2010-09-20 19:44:49

4

在Microsoft VB.Net上工作的開發人員之一有關於此想法的blog post。他說這是一個好主意,但需要重構一些編譯器。

如果您認爲應該優先處理,您可以在博客上發表評論。或者在Microsoft Connect建議一些東西。

+0

那麼這樣的答案呢。該博客文章說:「但是,目前的編譯器體系結構可以追溯到VB嚴格面向行導向的語言,因此我們必須首先重構編譯器」,這是另一種說法,微軟並沒有更新解析器在十年... – Eugene 2010-09-20 12:36:57

+1

公平起見,如果他們更新他們的解析器的樂趣,而不是在VB中實現有用的新功能,我會是第一個抱怨。順便說一句,我認爲續行後的評論會很有用,但我可能不會把它們當作一個非常重要的選項。 – MarkJ 2010-09-20 13:54:37

相關問題