2010-04-12 53 views
2

這個問題是針對懶惰的VB程序員。請。在VB.NET中隱式投射

在VB我可以做,我不會得到任何錯誤。

實施例1

Dim x As String = 5 
Dim y As Integer = "5" 
Dim b As Boolean = "True" 

實施例2

Dim a As EnumType = 4 
Dim v As Integer = EnumType.EnumValue 

實施例3

Private Sub ButtonClick(sender As Object, e As EventArgs) 
    Dim btn As Button = sender   
End Sub 

實施例4

Private Sub ButtonClick(sender As Button, e As EventArgs) 
    Dim data As Contact = sender.Tag 
End Sub 

如果我確實知道預期的運行時類型,這是「禁止」依賴vb-language內置投射嗎? 我什麼時候可以依靠?

+0

你可以擴展這個問題:你可以依靠默認參數嗎?例如record(「fieldname」),record!FieldName,「abc」(1)等。 – 2010-04-12 02:57:02

+0

我不明白,你的意思是依賴於默認參數,當然你可以,這就是他們想要的,但你必須檢查是否爲空,因爲它可以被用戶代碼取消:CallMethod(3,4,Nothing) – Shimmy 2010-04-12 03:02:52

+0

對不起,我的意思是默認屬性,正如我的例子可以看出。 – 2010-04-22 18:32:01

回答

1

評論到MarkJ每移動OP回答

隨意依靠它你想要的,只要確保你知道什麼隱式轉換是做規則。也就是說,示例#4看起來很容易在將來打破,如果之前至少有一次空檢,我會更加快樂。

0

如果您使用的是Visual Basic 2008,另一個選項是執行強制轉換(例如Option Strict On)並依賴Option Implicit On選項,因此不需要兩次寫入該類型。

Dim x = 5.ToString() 
Dim data = DirectCast(sender.Tag, Contact) 
+0

我知道所有這些,我想你誤解了我的觀點。 – Shimmy 2010-04-12 03:43:06

3

這當然不是「禁止」使用Option Strict Off但幾乎所有人都強烈建議使用Option Strict On

原因在其他問題中進行了解釋,例如this

+1

同意,它不被禁止,它只是皺起了眉頭。隨意依靠它所有你想要的,只要確保你知道隱式演員正在做什麼的規則。也就是說,示例#4看起來很容易在將來打破,如果之前至少有一次空檢,我會更加快樂。 – 2010-04-12 13:21:11

+0

@Chris,如果你想單獨放置你的文章,我會把它標記爲答案。 – Shimmy 2010-04-12 13:56:26

+0

謝謝@Shimmy,現在轉移到答案 – 2010-04-12 15:44:20

0

像這樣的「懶惰」做法的諷刺意味是,他們通常最終會花費你更多的時間在長遠。你真的可以絕對確定你的輸入將始終是一種格式,可以在任何情況下和所有語言環境中自動轉換爲預定類型?

考慮到所有可能的影響,並處理幾乎不可避免的錯誤,可能需要更多的時間,而不僅僅是強調輸入變量,嚴格驗證輸入,並明確地在需要的地方施放。

+0

我不確定。我敢打賭你是C#呃。當我明確地施放一個變量時(爲什麼我會施放,因爲我知道預期的類型),我會採取相同的風險,我可以依靠lang內置的自動施放功能,這就是爲什麼我是VBer,而且我是如此沉迷於它。 我只是想確保它沒有正式被棄用。 – Shimmy 2010-04-13 13:29:11