复制
Whats the difference between declaring as new and as something new something i
很遗憾我不知道这一点,但任何人都可以解释它们之间的区别:
Dim X as New Y
和
Dim X as Y = New Y()
答案 0 :(得分:13)
第一个只是推断出类型是Y.第二个指定它。这允许您编写如下内容:
Dim X as IList(Of String) = New List(Of String)
然后限制了使用List(Of String)
的选择范围 - 这意味着稍后您可能会选择使用IList(Of String)
的不同实现,并且它仍然会编译。
当然,较短版本的 具有简洁的好处 - 如果你有很长的类型名称(例如使用嵌套泛型),这可能很重要。它也是匿名类型所必需的,你不能表达X的类型。
答案 1 :(得分:8)
Jon Skeet已经提供了正确的答案,但我想我会增加一些额外的答案......
虽然这不是你的具体问题,但
之间存在重大差异Dim X = New Y()
和
Dim X As Y = New Y()
这里的差异实际上取决于您使用的VB.NET版本。
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()
这里的差异(对于较新版本的VB.NET)是type inference在这里生效。因为您没有指定任何类型,但是编译器很明显New Y()
返回类型为Y
的实例,它会自动推断出X
的类型应为{{1}这比对象更具体。类型干扰也适用于更复杂的表达式。
Y
这与在VB.NET 7&中完全相同。 8。
总而言之,您可以有效地替换
Dim X as Y = New Y()
与
Dim X As New Y()
在VB.NET 9中,由于类型推断,编译器会将两行完全相同。但是,在早期版本中,第二行将是弱类型(类型为Dim X = New Y()
),这是不可取的。同样,这不是问题的直接答案,但我认为这可能有助于指出。
答案 2 :(得分:3)
没有区别。 VB.NET提供:
Dim X As New Y
在语法上与旧的VB6声明语法兼容。