我正在努力理解VB6中的按值傳遞和按引用傳遞。我在.NET和Java等面向對象的編程語言中完全理解了這些概念(我意識到Java并沒有通過引用傳遞)??聪旅娴拇a:Private Sub Form_Load()Dim Test As IntegerTest = 1TestFunction Test 'line 5MsgBox (Test)End SubPrivate Sub TestFunction(ByVal i As Integer) i = i + 1End Sub當我在第5行的Test上放置方括號時,消息框將按我期望的那樣打印1?,F在看看下面的代碼:Private Sub Form_Load()Dim Test As IntegerTest = 1TestFunction Test 'line 5MsgBox TestEnd SubPrivate Sub TestFunction(ByRef i As Integer) i = i + 1End Sub消息框將按我期望的那樣打印2。但是,如果將括號添加到第5行,則消息框將打印1,這是我所不希望的??雌饋?,即使被調用函數中定義的變量是ByRef,調用函數也可以按值傳遞。似乎反之亦然,例如,如果被調用函數的簽名帶有定義為ByVal的變量,則它將始終為ByVal(即使調用函數中變量周圍沒有括號)。VB6中這背后的想法是什么?我意識到這是VB6中的一個基本問題,但這使我感到困惑。我已經閱讀了MSDN文檔,并且意識到這是真的,但是并沒有解釋其背后的原因。
2 回答

慕工程0101907
TA貢獻1887條經驗 獲得超5個贊
將任何表達式括在圓括號中會使該表達式首先執行求值,然后再執行其他操作,即使該表達式只是單個變量也是如此。在您的情況下,該表達式的結果將作為參數傳遞。
因此,實際上您是通過引用傳遞參數。但是,您傳遞的參數是表達式的結果,而不是原始變量。這就是為什么原始變量無法更新的原因。
添加回答
舉報
0/150
提交
取消