VB.Net:使用New构造函数初始化变量

时间:2013-06-01 22:47:57

标签: vb.net variables constructor initialization

初始化列表或队列或堆栈或类似的东西时,首选哪种方法?

Dim q as Queue(Of Integer) = New Queue(Of Integer)

Dim q as New Queue(Of Integer)

另外,我已经开始使用New作为字符串和整数变量 - 这是愚蠢的吗?使用New是否有任何缺点,而不仅仅是将变量设置为默认设置? E.g。

Dim Num1 As New Integer
Dim Str1 As New String("")
Dim Bool1 As New Boolean

谢谢!

1 个答案:

答案 0 :(得分:2)

如果你问程序员在编写程序时是否喜欢打字或多或少,那么通常的答案就是“少了!”。如果你问他们是否喜欢或多或少的错误,通常的答案是“少!”那些是相互冲突的目标。

As New语法已经成为VB.NET的一部分很长一段时间了。但它确实附带了字符串,您将它完全留给运行时来确定是否应该创建一个新对象。这确实是一个bug生成器。有时您确实想要创建一个新对象,即使已经分配了该变量。在这个片段中,它也很模糊,例如:

For ix As Integer = 0 To 42
   Dim q As New Queue(Of Integer)
   '' etc...
Next

问题是:你是否得到了队列的一个实例,在循环的第一次传递中创建,或者你得到43个?程序员的实际意图是什么?语法不是很清楚。

有一个你忽略的替代方案和我喜欢的方案。从VB9(又名VS2008)开始称为“类型推断”。你的地方指定变量的类型,但让它由编译器决定。需要使用Option Infer On启用此选项,默认情况下会启用此选项。它结合了As New所具有的缩写语法的优点,并且仍然允许您使用New语句在代码中显式创建对象:

Option Infer On
...
For ix As Integer = 0 To 42
   Dim q = New Queue(Of Integer)
   '' etc...
Next

其中q被编译器推断为Queue类型,并且很清楚代码生成43个队列实例。 C#语言中的完全等价物是 var 关键字。