所以我有這樣的:定義「我的變量將會是什麼」是一個好習慣嗎?
Dim aBoolean As Boolean = True
它將使任何區別,只是做到這一點?
Dim aBoolean = True
在其他語言中,我認爲這是一個很好的做法,同時定義變量的類型,性能或其他。我不完全相信VB.NET。
感謝。
所以我有這樣的:定義「我的變量將會是什麼」是一個好習慣嗎?
Dim aBoolean As Boolean = True
它將使任何區別,只是做到這一點?
Dim aBoolean = True
在其他語言中,我認爲這是一個很好的做法,同時定義變量的類型,性能或其他。我不完全相信VB.NET。
感謝。
這取決於。明確定義變量可以提高可讀性,但我認爲這並不總是必要的。 (要清楚的是,它與代碼的實際功能無關)。
在這個具體的例子,你跟着一個Boolean
分配True
聲明,所以它已經清楚地表明aBoolean
實際上是一個Boolean
當它被宣佈。在這種情況下,As Boolean
語法不是必需的。
其他情況可能不太清楚。例如,如果聲明之後是函數調用的結果,那麼明確聲明該變量是Boolean
可能會更清楚。例如
Dim aBoolean As Boolean = TestValidityOfObject(o)
只要你打開了Option Infer
,它不會有什麼不同。第二行只是第一個語法的縮寫。在這一點上,它取決於你應該使用哪種風格偏好。
在類型推斷之前,沒有聲明類型時存在性能問題,但這不再是問題;由於類型推理,無論您是否聲明變量,變量都將是布爾類型。
聲明該類型可以幫助編譯器更快地捕獲錯誤,並且通常會爲您提供更好的Intellisense。
您正在使用所謂的「類型推斷」。這是編譯器在編譯時計算出賦值右側的類型並將其用作變量類型的地方。
這是一般來說安全和方便的功能。然而,有幾件事要記住:
Option Infer
on;否則,編譯器不會執行類型推斷,而是取決於您對Option Strict
的設置,而是給您編譯時錯誤(Option Strict On
)或將您的變量鍵入爲Object
,並在任何地方使用後期綁定。這是純粹的邪惡。 (Option Strict Off
)例如...
Dim myClass as MyBaseClass = New SubClass()
這是完全合法的;我們將變量作爲基類輸入,併爲其分配一個代表子類實例的值。沒什麼特別的。但是,如果我們切換僅通過刪除類型聲明類型推斷......
Dim myClass = New SubClass()
類型推斷現在看到myClass
爲,而不是MyBaseClass
。這看起來很明顯,但重要的是你應該知道它在做什麼。
有關使用類型推斷的更多信息和冗長的討論,請參閱this question。雖然這個問題針對C#,但唯一真正的區別是我上面列出的第一個項目。其他一切在概念上都是一樣的。
@Adam:`Dim aBoolean = True`仍然會在'Option Infer On`中輸入`aBoolean`作爲`Boolean`,即使使用Option Strict Off也是如此。 – 2011-01-27 20:16:40