2011-01-27 41 views

回答

5

這取決於。明確定義變量可以提高可讀性,但我認爲這並不總是必要的。 (要清楚的是,它與代碼的實際功能無關)。

在這個具體的例子,你跟着一個Boolean分配True聲明,所以它已經清楚地表明aBoolean實際上是一個Boolean當它被宣佈。在這種情況下,As Boolean語法不是必需的。

其他情況可能不太清楚。例如,如果聲明之後是函數調用的結果,那麼明確聲明該變量是Boolean可能會更清楚。例如

Dim aBoolean As Boolean = TestValidityOfObject(o) 
5

只要你打開了Option Infer,它不會有什麼不同。第二行只是第一個語法的縮寫。在這一點上,它取決於你應該使用哪種風格偏好。

+0

@Adam:`Dim aBoolean = True`仍然會在'Option Infer On`中輸入`aBoolean`作爲`Boolean`,即使使用Option Strict Off也是如此。 – 2011-01-27 20:16:40

3

在類型推斷之前,沒有聲明類型時存在性能問題,但這不再是問題;由於類型推理,無論您是否聲明變量,變量都將是布爾類型。

聲明該類型可以幫助編譯器更快地捕獲錯誤,並且通常會爲您提供更好的Intellisense。

3

您正在使用所謂的「類型推斷」。這是編譯器在編譯時計算出賦值右側的類型並將其用作變量類型的地方。

這是一般來說安全和方便的功能。然而,有幾件事要記住:

  1. 您必須有Option Infer on;否則,編譯器不會執行類型推斷,而是取決於您對Option Strict的設置,而是給您編譯時錯誤(Option Strict On)或將您的變量鍵入爲Object,並在任何地方使用後期綁定。這是純粹的邪惡。 (Option Strict Off
  2. 在您的具體情況下,編譯器無法解決問題。然而,這是可以使用類型推斷以這樣的方式來改變你的代碼的語義:

例如...

Dim myClass as MyBaseClass = New SubClass() 

這是完全合法的;我們將變量作爲基類輸入,併爲其分配一個代表子類實例的值。沒什麼特別的。但是,如果我們切換僅通過刪除類型聲明類型推斷......

Dim myClass = New SubClass() 

類型推斷現在看到myClass爲​​,而不是MyBaseClass。這看起來很明顯,但重要的是你應該知道它在做什麼。

有關使用類型推斷的更多信息和冗長的討論,請參閱this question。雖然這個問題針對C#,但唯一真正的區別是我上面列出的第一個項目。其他一切在概念上都是一樣的。

相關問題