Различия между передачей аргумента по значению и по ссылке (Visual Basic)
При передаче одного или нескольких аргументов в процедуру каждый аргумент соответствует основному элементу программирования в коде вызова.Можно передать либо значение этого базового элемента, либо ссылку на него.Это называется механизмом передачи.
Передача по значению
При передаче аргумента по значению нужно указать ключевое слово ByVal (Visual Basic) для соответствующего параметра в определении процедуры.При использовании этого механизма передачи Visual Basic копирует значение из базового элемента программирования в локальную переменную процедуры.Код процедуры не имеет доступа к основному элементу в коде вызова.
Передача по ссылке
При передаче аргумента по ссылке нужно указать ключевое слово ByRef (Visual Basic) для соответствующего параметра в определении процедуры.При использовании этого механизма передачи Visual Basic предоставляет процедуре прямую ссылку на основной элемент программирования в коде вызова.
Механизм передачи и тип элемента
Выбор механизма передачи отличается от классификации типа базового элемента.Передача по значению или по ссылке зависит от того, что Visual Basic передает коду процедуры.Тип значения и ссылочный тип указывают на способ хранения элемента программирования в памяти.
Однако механизм передачи и тип элемента являются взаимосвязанными.Значение ссылочного типа — это указатель на данные, находящиеся в другом месте в памяти.Это означает, что при передаче ссылочного типа по значению код процедуры имеет указатель на базовые данные элемента, даже если он не имеет доступа к самому базовому элементу.Например, если элемент является переменной массива, код процедуры не имеет непосредственного доступа к переменной, но он получает доступ к членам массива.
Возможность изменения
Когда неизменяемый элемент передается в качестве аргумента, процедура не может изменить его в вызывающем коде независимо от того, был ли он передан ByVal или ByRef.
В случае изменяемого элемента см. таблицу, отображающую связь между типом элемента и механизмом передачи.
Тип элемента |
Передача ByVal |
Передача ByRef |
---|---|---|
Тип значения (содержит только значение) |
Процедура не может изменять переменную или ее члены. |
Процедура может изменять переменную и ее члены. |
Ссылочный тип (содержит указатель на экземпляр класса или структуры) |
Процедура не может изменить переменную, но может изменять члены указываемого экземпляра. |
Процедура может изменять переменную и члены указываемого экземпляра. |
См. также
Задачи
Практическое руководство. Передача аргументов в процедуру (Visual Basic)
Практическое руководство. Изменение значения аргумента процедуры (Visual Basic)
Практическое руководство. Защита аргумента процедуры от изменения значения (Visual Basic)
Практическое руководство. Принудительная передача аргумента по значению (Visual Basic)
Основные понятия
Параметры и аргументы процедуры (Visual Basic)
Передача аргументов по значению и по ссылке (Visual Basic)
Различия между аргументами Modifiable и Nonmodifiable (Visual Basic)