Основы VB.NET Урок 25. Передача данных по значению и по ссылке
Параметры в функции и процедуры можно передавать по значению и по ссылке. Когда мы передаем параметры по значению, то мы фактически передаем копию переменной, если же мы передаем параметр по ссылке, то мы передаем оригинал переменной. В первом случае - при передаче параметра по значению, если мы изменяем параметр внутри функции, то оригинал переменной не меняется. Во втором же случае - при передаче по ссылке, изменение параметра в функции влечет за собой изменение и его оригинала.
Вот полный пример, поясняющий все вышеизложенное:
Imports System
Module Test
Function f1(ByVal a As Integer, ByRef b As Integer) As Integer
a = a + 1
b = b + 1
Return 0
End Function
Sub main()
Dim n, m As Integer
n = 4
m = 4
f1(n, m)
Console.WriteLine("{0}, {1}", n, m)
End Sub
End Module
Результатом выполнения этой программы будет 4 и 5. Действительно, выполение программы начинается с метода main нашего модуля Test. В нем мы объявляем две переменные n и m типа Integer и присваиваем им значение 4. Далее вызывается функция f1, внутри которой первый и второй передаваемый параметры увеличиваются на 1. Так как первый параметр функции объявлен с модификатором ByVal, то в функцию передается только его копия, второй же параметр передается с модификатором ByRef, т. е. передается его оригинал. Таким образом вызываемая функция f1 увеличивает на 1 только переменную m.
Вот еще пример. Процедура Swap меняет значения своих параметров:
Module Test
Sub Swap(ByRef a As Integer, ByRef b As Integer)
'Объявляем переменную t для обмена
Dim t As Integer
t = a
a = b
b = t
End Sub
Sub main()
Dim n, m As Integer
n = 4
m = 14
Console.WriteLine("{0}, {1}", n, m) 'Напечатается 4 и 14
Swap(n, m)
Console.WriteLine("{0}, {1}", n, m) 'Напечатается 14 и 4
End Sub
End Module
Оба параметра (a и b) передаются в процедуру с ключевым словом ByRef, так что процедура меняет местами значения именно самих передаваемых переменных, а не их копий. Кстати говоря, в такую процедуру (или функцию) можно передавать как переменные, так и конкретные значения:
...
Swap(n, 30)
...
В приведенном примере n приобретет значение 30.
|