Меню Visual Basic

       

Эффективная передача аргументов


Если не задается обратное, аргументы передаются в процедуры по ссылке. Это эффективно, так как все аргументы, передаваемые по ссылке, требуют одинакового времени для передачи и одинакового количества памяти (4 байта) для каждой процедуры, независимо от типа данных аргумента.

Если включить ключевое слово ByVal в описание процедуры, то аргумент будет передан по значению. Аргументы, переданные по значению, занимают от 2 до 16 байт на процедуру, в зависимости от типа данных аргументов. Типы данных большего размера требуют на передачу немного больше времени. По этой причине обычно не следует передавать по значению типы данных String и Variant.

При передаче аргумента по значению создается копия исходной переменной. Изменения аргумента в процедуре не распространяются на значение исходной переменной. Например:

Function Factorial (ByVal MyVar As Integer)' Описание функции.

MyVar = MyVar - 1

If MyVar = 0 Then

Factorial = 1

Exit Function

End If

Factorial = Factorial(MyVar) * (MyVar + 1)

End Function

' Вызов функции Factorial с переменной S.

S = 5

Print Factorial(S)' Выводит на экран 120 (факториал 5).

Print S' Выводит на экран 5.

Без ключевого слова ByVal в описании функции приведенные выше инструкции Print выводят на экран 1 и 0. Причина заключается в том, что MyVar ссылается затем на переменную S, которая уменьшается на 1 до тех пор, пока не станет равной 0.

Поскольку ByVal создает копию аргумента, она позволяет передавать в функцию Factorial значение типа Variant. Невозможна передача по ссылке значений типа Variant если процедура, описывающая аргумент, использует другой тип данных.



Содержание раздела