在vb.net 中使用"As"关键字和"="运算符有区别吗?
例:
Using aThing As New Thing()
...
End Using
' OR
Using aThing = New Thing()
...
End Using
如果您有Option Infer On
,则不会有有效的区别。 如果您有Option Infer Off
则第一个代码段将始终生成Thing
类型的变量,而第二个代码段将无法使用Option Strict On
进行编译,并导致带有Option Strict Off
的Object
类型的变量。
第一个代码片段在键入变量时是明确的,因此无论您对Option Strict
和Option Infer
进行什么设置,它都将是您指定的类型。 第二个代码段没有显式说明类型,因此编译器必须隐式确定该类型。 使用Option Infer On
,类型Thing
可以从初始化语句中推断出来。 对于Option Infer Off
,类型将默认为Object
并且必须使用后期绑定,这是Option Strict On
中不允许的。
值得注意的是,您的原始问题并不真正有效,因为它实际上不是使用As
或=
的情况。 这:
Using aThing As New Thing()
其实只是一个简写:
Using aThing As Thing = New Thing()
因此,您实际上以任何一种方式使用=
选择只是是否提供As
子句。Option Strict On
需要As
子句,除非您也有Option Infer On
并且可以从初始化语句推断出类型。 如果没有初始化语句,或者该语句的类型与您希望变量的类型不同,则需要一个As
子句来告诉编译器它无法自行推断的变量类型。