定义“我的变量将是什么”是一种好习惯吗?

时间:2011-01-27 20:02:09

标签: vb.net variables types

所以我有这个:

Dim aBoolean As Boolean = True

这样做会有什么不同吗?

Dim aBoolean = True

在其他语言中,我认为为性能或其他东西定义变量的类型是一个好习惯。我对VB.NET并不完全确定。

感谢。

4 个答案:

答案 0 :(得分:5)

只要您启用Option Infer,就不会有任何区别。第二行只是第一行的句法缩写。那时候,你的风格偏好取决于你应该使用哪种。

答案 1 :(得分:5)

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

在此具体示例中,您使用Boolean分配True来跟踪声明,因此aBoolean实际上是Boolean已经非常明确什么时候宣布。在这种情况下,As Boolean语法不是必需的。

其他情况可能不那么清楚。例如,如果声明后跟函数调用的结果,则可能更明确地明确声明该变量是Boolean。 e.g。

Dim aBoolean As Boolean = TestValidityOfObject(o)

答案 2 :(得分:3)

在进行类型推断之前,在没有声明类型时存在性能问题,但这不再是问题;由于类型推断,无论你是否声明它,变量的类型都是布尔值。

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

答案 3 :(得分:3)

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

这通常是一种安全方便的功能。但是,要记住以下几点:

  1. 您必须开启Option Infer;否则,编译器不进行类型推断,并且根据您对Option Strict的设置,而不是给出编译时错误(Option Strict On)或将变量键入为Object并使用到处都是后期绑定这是纯粹的邪恶。 (Option Strict Off
  2. 在您的特定情况下,编译器无法搞砸。但是,可以使用类型推断来改变代码的语义:
  3. 例如......

    Dim myClass as MyBaseClass = New SubClass()
    

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

    Dim myClass = New SubClass()
    

    类型推断现在会将myClass视为SubClass而不是MyBaseClass。这似乎是显而易见的,但重点是你应该知道它在做什么。

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