第一个(示例)只是推断类型为Y。而第二个则明确指定类型为Y。这使你可以写出类似以下的代码:
Dim X as IList(Of String) = New List(Of String)
这就限制了使用 List(Of String)
的选择范围。这意味着以后您可能会选择使用不同的 IList(Of String)
实现,它仍然可以编译。
当然,更短的版本确实有简洁的好处——如果您具有非常长的类型名称(例如使用嵌套泛型),这可能非常重要。对于匿名类型,它也是必需的,因为您无法表达 X 的类型。
Jon Skeet已经提供了正确的答案,但我想再加一点额外的内容...
虽然这不是你特别问的问题,但有一个重要的区别:
Dim X = New Y()
并且
Dim X As Y = New Y()
VB.NET 7 & 8
Dim X = New Y()
X
作为类型为object
(System.Object
)的变量,然后创建了一个类型为Y
的对象并将其分配给X
。请注意,只有在定义了Option Strict Off
时才能正常运行,否则甚至无法编译。这实际上只是从VB6和早期语法中延续下来的,通常不被鼓励使用。Dim X as Y = New Y()
X
被强类型化了,也就是说它的类型是Y
而不是object
(所有类型都从中继承,包括装箱时的值类型)。
VB.NET 9及其后续版本
Dim X = New Y()
New Y()
返回了一个类型为Y
的实例,它自动推断X
的类型应该是Y
,这比object更具体。类型推断也适用于更复杂的表达式。Dim X as Y = New Y()
总之,您可以有效地替换
Dim X As New Y()
使用
Dim X = New Y()
没有区别。VB.NET 提供了以下特点:
Dim X As New Y
=
替换as
)。我已经编辑了帖子以反映所有这些内容。 - Noldorin=
代替as
”很有道理,我们两个都在密谋让我困惑死 :) - Binary Worrier