我在VB6中努力理解按值傳遞並通過引用。我在面向對象的編程語言(如.NET和Java)中完全理解了這些概念(我意識到Java沒有引用)。看看下面的代碼:VB6按值傳遞並通過引用
Private Sub Form_Load()
Dim Test As Integer
Test = 1
TestFunction Test 'line 5
MsgBox (Test)
End Sub
Private Sub TestFunction(ByVal i As Integer)
i = i + 1
End Sub
消息框打印1,因爲我期望的那樣。如果我在第5行中放上括號測試,那麼消息框會按我的預期打印1。現在看看下面的代碼:
Private Sub Form_Load()
Dim Test As Integer
Test = 1
TestFunction Test 'line 5
MsgBox Test
End Sub
Private Sub TestFunction(ByRef i As Integer)
i = i + 1
End Sub
消息框打印2,如我所料。但是,如果您將括號添加到第5行,那麼消息框會打印1,因爲我不期望。看起來調用函數可以通過值傳遞,即使被調用函數中定義的變量是ByRef。看起來情況並非如此,即如果被調用的函數具有變量定義爲ByVal的簽名,則它總是ByVal(即使調用函數中的變量周圍沒有括號)。 VB6背後的想法是什麼?我意識到這是VB6中的一個基本問題,但它讓我感到困惑。我已閱讀MSDN文檔,並意識到這是全部真實的,但它並沒有解釋它背後的想法。
謝謝。這很有用。 Call函數的用途是什麼?這是否意味着通過的變量永遠不會被視爲表達式?我很驚訝,因爲我從來沒有真正想過。另外,如果有多個變量可以通過,那麼我認爲你不能包含表達式? – w0051977 2012-04-21 20:34:23
我不確定這是一個「陷阱」,因爲它是有記錄的,故意的行爲。 Call關鍵字是遺留的,並且已被棄用,可以回溯到早期的MS Basics。它在那裏可以輕鬆移植舊程序。 – Bob77 2012-04-22 03:56:17
無論參數是否被視爲表達式,「調用」關鍵字都沒有影響。它只是使用圓括號作爲傳遞參數的方式,因此一對括號具有不同的含義。但是參數周圍的括號會產生一個表達式,就像沒有「調用」關鍵字一樣。 – 2012-04-23 14:02:03