所以我有这个:
Dim aBoolean As Boolean = True
这样做会有什么不同吗?
Dim aBoolean = True
在其他语言中,我认为为性能或其他东西定义变量的类型是一个好习惯。我对VB.NET并不完全确定。
感谢。
答案 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)
您正在使用所谓的“类型推断”。这是编译器在编译时计算出赋值右侧的类型是什么,并将其用作变量的类型。
这通常是一种安全方便的功能。但是,要记住以下几点:
Option Infer
;否则,编译器不进行类型推断,并且根据您对Option Strict
的设置,而不是给出编译时错误(Option Strict On
)或将变量键入为Object
并使用到处都是后期绑定这是纯粹的邪恶。 (Option Strict Off
)例如......
Dim myClass as MyBaseClass = New SubClass()
这是完全合法的;我们将变量键入为基类,并为其指定一个表示子类实例的值。没什么特别的。但是,如果我们通过删除类型声明来切换到类型推断......
Dim myClass = New SubClass()
类型推断现在会将myClass
视为SubClass
而不是MyBaseClass
。这似乎是显而易见的,但重点是你应该知道它在做什么。
有关使用类型推断的更多信息和冗长讨论,请参阅this question。虽然这个问题针对C#,唯一真正的区别是我在上面列出的第一个项目。其他一切在概念上都是一样的。