progs.biz  
Начало>VB.NET>Основы>Урок 25
C#
VB.NET
Visual C++.NET
ASP.NET
Visual C++ 6
WinAPI
C/C++
Delphi
C++ Builder
Java
SQL
PHP
DirectX
Visual Basic 6.0
Ассемблер
Интернет
Сист. прогр-ние
Pocket PC
Обзор книг
Обзор программ

Джон Коннелл. Разработка элементов управления Microsoft .NET на Microsoft Visual Basic .NET
Джон Коннелл. Разработка элементов управления Microsoft .NET на Microsoft Visual Basic .NET
Заказать на Озоне



Яндекс-цитирования

Основы 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.

Рассылки нашего сайта на Subscribe.Ru
Visual C++, MFC
C# и .NET
VB.NET
ASP.NET new!
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


 
 
Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2008 сайт progs.biz
© 2002-2008 Игорь Алексеев