2011-01-27 80 views

回答

5

这取决于。明确定义变量可以提高可读性,但我认为这并不总是必要的。 (要清楚的是,它与代码的实际功能无关)。

在这个具体的例子,你跟着一个Boolean分配True声明,所以它已经清楚地表明aBoolean实际上是一个Boolean当它被宣布。在这种情况下,As Boolean语法不是必需的。

其他情况可能不太清楚。例如,如果声明之后是函数调用的结果,那么明确声明该变量是Boolean可能会更清楚。例如

Dim aBoolean As Boolean = TestValidityOfObject(o) 
5

只要你打开了Option Infer,它不会有什么不同。第二行只是第一个语法的缩写。在这一点上,它取决于你应该使用哪种风格偏好。

+0

@Adam:`Dim aBoolean = True`仍然会在'Option Infer On`中输入`aBoolean`作为`Boolean`,即使使用Option Strict Off也是如此。 – 2011-01-27 20:16:40

3

在类型推断之前,没有声明类型时存在性能问题,但这不再是问题;由于类型推理,无论您是否声明变量,变量都将是布尔类型。

声明该类型可以帮助编译器更快地捕获错误,并且通常会为您提供更好的Intellisense。

3

您正在使用所谓的“类型推断”。这是编译器在编译时计算出赋值右侧的类型并将其用作变量类型的地方。

这是一般来说安全和方便的功能。然而,有几件事要记住:

  1. 您必须有Option Infer on;否则,编译器不会执行类型推断,而是取决于您对Option Strict的设置,而是给您编译时错误(Option Strict On)或将您的变量键入为Object,并在任何地方使用后期绑定。这是纯粹的邪恶。 (Option Strict Off
  2. 在您的具体情况下,编译器无法解决问题。然而,这是可以使用类型推断以这样的方式来改变你的代码的语义:

例如...

Dim myClass as MyBaseClass = New SubClass() 

这是完全合法的;我们将变量作为基类输入,并为其分配一个代表子类实例的值。没什么特别的。但是,如果我们切换仅通过删除类型声明类型推断......

Dim myClass = New SubClass() 

类型推断现在看到myClass为​​,而不是MyBaseClass。这看起来很明显,但重要的是你应该知道它在做什么。

有关使用类型推断的更多信息和冗长的讨论,请参阅this question。虽然这个问题针对C#,但唯一真正的区别是我上面列出的第一个项目。其他一切在概念上都是一样的。

相关问题