VB6 przechodzi przez wartość i przechodzi przez referencję

Usiłuję zrozumieć przepustkę po wartości i przejść przez referencję w VB6. Rozumiem te pojęcia w pełni w językach programowania obiektowego takich jak .NET i Java (zdaję sobie sprawę, że Java nie przechodzi przez referencję). Spójrz na poniższy kod:

<code>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
</code>

Kiedy umieszczam nawiasy wokół Testu w linii 5, okno komunikatu wyświetla się tak, jak powinienem. Teraz spójrz na poniższy kod:

<code>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
</code>

Okno komunikatu drukuje 2, tak jak powinienem. Jeśli jednak dodasz nawiasy do linii 5, to okno komunikatu wydrukuje 1, tak jak bym się tego nie spodziewał. Wydaje się, że funkcja wywołująca może przechodzić przez wartość, nawet jeśli zmienną zdefiniowaną w wywoływanej funkcji jest ByRef. Wydaje się, że nie jest odwrotnie, tzn. Jeśli wywołana funkcja ma sygnaturę ze zmienną zdefiniowaną jako ByVal, to zawsze będzie to ByVal (nawet jeśli nie ma nawiasów wokół zmiennej w funkcji wywołującej). Jakie jest to myślenie w VB6? Zdaję sobie sprawę, że jest to podstawowe pytanie w VB6, ale mnie to pomieszało. Przeczytałem dokumentację MSDN i zdaję sobie sprawę, że to wszystko prawda, jednak nie wyjaśnia to rozumowania.

questionAnswers(2)

yourAnswerToTheQuestion