我剛安裝了Visual Studio 2010的服務包(Windows Update上提出的),我可以看到的「智能感知」,這意味着一個新的功能,當我在寫一個VB.NET或Function
它Sub
不會自動完成參數與ByRef
或ByVal
...爲什麼沒有必要指出ByVal/ByRef了?
1)有無論如何,我可以配置這個選項回到它以前是怎麼回事?
2)如果我不指定ByX
,默認使用哪一個? (好像總是ByRef
)
我剛安裝了Visual Studio 2010的服務包(Windows Update上提出的),我可以看到的「智能感知」,這意味着一個新的功能,當我在寫一個VB.NET或Function
它Sub
不會自動完成參數與ByRef
或ByVal
...爲什麼沒有必要指出ByVal/ByRef了?
1)有無論如何,我可以配置這個選項回到它以前是怎麼回事?
2)如果我不指定ByX
,默認使用哪一個? (好像總是ByRef
)
蒂姆覆蓋你直接問,但別的東西要記住的是,任何引用類型變量,如用戶定義的類甚至如果按值傳遞將允許您更改該實例屬性等。但它不會允許您更改整個對象。這可能是爲什麼它似乎你引用
Public Sub (Something As WhateverClass)
Something = New WhateverClass 'will result in no changes when outside this method
Something.Property1 = "Test" 'will result in an updated property when outside this method
End Sub
被默認爲從MSDN:
引用類型的值是一個指向內存的其他地方的數據。 這意味着,當按值傳遞引用類型, 程序代碼有一個指針指向的底層元素的數據, 即使它不能訪問基礎元件本身。對於 例如,如果元件是一個數組變量,程序代碼並 不能訪問變量本身,但它可以訪問該陣列 成員。
這個答案有點誤導性,因爲它解釋了「引用類型的值如何工作」,而問題是「爲什麼沒有必要再指明ByVal/ByRef?」 – mchar 2017-06-05 11:20:36
看來,這個職位涵蓋了你的問題:
因此,沒有,有沒有辦法讓舊的行爲。從現在開始,ByVal
是默認值(之前的值),它不會自動添加到方法參數中。
在我看來,這是一個很好的決定,因爲它使VB.NET多一點與C#一致,避免了不必要的「噪音」(它已經足夠詳細)。
舊行爲:
Private Sub test(ByVal test As String)
End Sub
新行爲
Private Sub test(test As String)
End Sub
簡潔直接的答案,做得好! – mchar 2017-06-05 11:22:25
轉移例程VBA中默認爲ByRef
時當心(見例如,「默認的方法傳遞參數的」在the bottom of this page,由偉大的芯片皮爾遜)。 這可能是凌亂的。
默認是'ByVal',但一定要理解什麼[按價值計算,通過引用傳遞(http://msdn.microsoft.com/en-us/library/ddck1z30.aspx)實際上意味着。 – 2012-02-09 08:50:57
你幾乎總是想通過'ByVal',而這實際上是默認的。沒有任何理由讓代碼與遍佈全國的'ByVal'混雜在一起;這只是「噪音」。只有在絕對必須具有傳遞引用語義時才明確指定'ByRef'。 – 2012-02-09 08:51:34