2017-05-05 40 views
1

在vb.net中使用'As'關鍵字和'='運算符有區別嗎?使用語句,As vs =

例子:

Using aThing As New Thing() 
    ... 
End Using 

' OR 

Using aThing = New Thing() 
    ... 
End Using 
+0

https://msdn.microsoft.com/en-us/library/865x40k4.aspx試試這些 –

回答

2

將不會有有效的區別,如果你有Option Infer On。如果您有Option Infer Off,則第一個代碼段將始終生成Thing類型的變量,而第二個代碼段將無法與Option Strict On一起編譯,並導致類型爲Object的變量與Option Strict Off

第一個代碼片段在其變量輸入中是明確的,因此它將是您指定的類型,而不管您對Option StrictOption 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子句來告知編譯器無法爲其自身推斷的變量的類型。