2010-09-20 74 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

相关问题