Udostępnij za pośrednictwem


Porady: zmienianie wartości argumentu procedury (Visual Basic)

Podczas wywoływania procedury każdy argument, który podajesz, odpowiada jednemu z parametrów zdefiniowanych w procedurze. W niektórych przypadkach kod procedury może zmienić wartość argumentu w kodzie wywołującym. W innych przypadkach procedura może zmienić tylko jego lokalną kopię argumentu.

Po wywołaniu procedury program Visual Basic tworzy lokalną kopię każdego argumentu przekazanego przez narzędzie ByVal. Dla każdego argumentu przekazanego przez element ByRef język Visual Basic udostępnia kod procedury bezpośredni odwołanie do elementu programowania bazowego argumentu w kodzie wywołującym.

Jeśli element bazowy w kodzie wywołującym jest elementem modyfikowalnym, a argument jest przekazywany ByRef, kod procedury może użyć bezpośredniego odwołania, aby zmienić wartość elementu w kodzie wywołującym.

Zmienianie wartości bazowej

Aby zmienić podstawową wartość argumentu procedury w kodzie wywołującym

  1. W deklaracji procedury określ ByRef dla parametru odpowiadającego argumentowi.

  2. W kodzie wywołującym przekaż modyfikowalny element programowania jako argument.

  3. W kodzie wywołującym nie należy ująć argumentu w nawiasach na liście argumentów.

  4. W kodzie procedury użyj nazwy parametru, aby przypisać wartość do bazowego elementu w kodzie wywołującym.

Zobacz przykład dalej, aby zapoznać się z pokazem.

Zmienianie kopii lokalnych

Jeśli element bazowy w kodzie wywołującym jest elementem niemodyfikowalnym lub jeśli argument jest przekazywany ByVal, procedura nie może zmienić jego wartości w kodzie wywołującym. Jednak procedura może zmienić jego lokalną kopię takiego argumentu.

Aby zmienić kopię argumentu procedury w kodzie procedury

  1. W deklaracji procedury określ wartość ByVal dla parametru odpowiadającego argumentowi.

    — lub —

    W kodzie wywołującym należy ująć argument w nawiasy na liście argumentów. Spowoduje to wymuś przekazanie argumentu przez wartość w języku Visual Basic, nawet jeśli odpowiadający mu parametr określa ByRefwartość .

  2. W kodzie procedury użyj nazwy parametru, aby przypisać wartość do lokalnej kopii argumentu. Wartość bazowa w kodzie wywołującym nie jest zmieniana.

Przykład

W poniższym przykładzie przedstawiono dwie procedury, które przyjmują zmienną tablicową i działają na jej elementach. Procedura increase po prostu dodaje jeden do każdego elementu. Procedura replace przypisuje nową tablicę do parametru a() , a następnie dodaje jeden do każdego elementu.

Public Sub increase(ByVal a() As Long)
    For j As Integer = 0 To UBound(a)
        a(j) = a(j) + 1
    Next j
End Sub
Public Sub replace(ByRef a() As Long)
    Dim k() As Long = {100, 200, 300}
    a = k
    For j As Integer = 0 To UBound(a)
        a(j) = a(j) + 1
    Next j
End Sub
Dim n() As Long = {10, 20, 30, 40}
Call increase(n)
MsgBox("After increase(n): " & CStr(n(0)) & ", " & 
    CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Call replace(n)
MsgBox("After replace(n): " & CStr(n(0)) & ", " & 
    CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))

MsgBox Pierwsze wywołanie wyświetla komunikat "After increase(n): 11, 21, 31, 41". Ponieważ tablica n jest typem odwołania, replace może zmienić jego składowe, mimo że mechanizm przekazywania to ByVal.

Drugie MsgBox wywołanie wyświetla komunikat "After replace(n): 101, 201, 301". Ponieważ n przekazano ByRefzmienną , replace można zmodyfikować zmienną n w kodzie wywołującym i przypisać do niej nową tablicę. Ponieważ n jest typem odwołania, replace może również zmienić jego składowe.

Możesz uniemożliwić procedurę modyfikowania samej zmiennej w kodzie wywołującym. Zobacz Instrukcje: ochrona argumentu procedury przed zmianami wartości.

Kompilowanie kodu

Po przekazaniu zmiennej przy użyciu odwołania należy użyć słowa kluczowego ByRef , aby określić ten mechanizm.

Wartością domyślną w języku Visual Basic jest przekazywanie argumentów według wartości. Jednak dobrym rozwiązaniem programistycznym jest dołączenie słowa kluczowego ByVal lub ByRef z każdym zadeklarowanym parametrem. Ułatwia to odczytywanie kodu.

Zabezpieczenia.NET Framework

Zawsze istnieje potencjalne ryzyko, aby umożliwić procedurze zmianę wartości bazowej argumentu w kodzie wywołującym. Przed użyciem tej wartości upewnij się, że ta wartość zostanie zmieniona i przygotuj się do sprawdzenia jej ważności.

Zobacz też