Я изо всех сил пытаюсь понять передачу по значению и передачу по ссылке в 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 и понял, что все это правда, однако это не объясняет причину этого.