Передача VB6 по значению и передача по ссылке

Я изо всех сил пытаюсь понять передачу по значению и передачу по ссылке в VB6. Я полностью понимаю эти концепции в объектно-ориентированных языках программирования, таких как.NET и Java (. Я понимаю, что в Java нет передачи по ссылке). Взгляните на код ниже:

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

Когда я помещаю тест в скобки в строке 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 и понял, что все это правда, однако это не объясняет причину этого.

12
задан Mathieu Guindon 20 June 2019 в 20:49
поделиться