Udostępnij za pośrednictwem


Porady: chronienie argumentu procedury przed zmianami wartości (Visual Basic)

Jeżeli procedura deklaruje parametr jako ByRef (Visual Basic), Visual Basic daje Kodeksu postępowania bezpośredniego odwołania do elementu programowania, leżących u podstaw argument kod wywołujący.Pozwala to na procedury, aby zmienić wartość, leżących u podstaw argument kod wywołujący.W niektórych przypadkach kod wywołujący może zaistnieć potrzeba ochrony przeciwko takiej zmiany.

Argument zawsze chronić przed zmiany, oświadczając, odpowiedni parametr ByVal (Visual Basic) w procedurze.Jeśli chcesz mieć możliwość zmiany podany argument w niektórych przypadkach, ale nie inne, można go zadeklarować ByRef i pozwól kod wywołujący określić mechanizm przekazywania w każdym wywołaniu.Odbywa się to poprzez załączając odpowiednie argumenty w nawiasach, przekazywane przez wartość lub nie należy ująć w nawiasy, przekazywane przez odwołanie.Aby uzyskać więcej informacji, zobacz Porady: wymuszanie przekazywania argumentu przez wartość (Visual Basic).

Przykład

Poniższy przykład pokazuje dwie procedury, które podjąć zmiennej array i działają na jego elementy.increase Procedury po prostu dodaje jeden do każdego elementu.replace Procedury przypisuje nową tablicę do parametru a() , a następnie dodaje do każdego elementu.Jednak ponowne przypisanie nie wpływa na podstawowej zmiennej tablicy w kod wywołujący.

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(ByVal 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)))

Pierwszy MsgBox wywołania Wyświetla "po increase(n): 11, 21, 31, 41".Ponieważ tablica n jest typem odwołania, replace można zmienić jej członków, mimo że mechanizm przekazywania jest ByVal.

Drugi MsgBox wywołania Wyświetla "po replace(n): 11, 21, 31, 41".Ponieważ n jest przekazywana ByVal, replace nie może zmodyfikować zmienną n w kod wywołujący przypisując nową macierz.Gdy replace powoduje utworzenie nowej instancji array k i przypisuje go do zmiennej lokalnej a, traci ona odniesienie do n przekazany przez kod wywołujący.Gdy przybierze on członków a, lokalnej tablicy k dotyczy.W związku z tym replace nie zwiększa wartości w tablicy n w kod wywołujący.

Kompilowanie kodu

Domyślnie w Visual Basic jest przekazywanie argumentów przez wartość.Jednak dobrą praktyką włączyć albo programowania jest ByVal (Visual Basic) lub ByRef (Visual Basic) słowa kluczowego z każdej zadeklarowanej parametru.Ułatwia to kod do odczytu.

Zobacz też

Zadania

Porady: przekazywanie argumentów do procedury (Visual Basic)

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

Porady: wymuszanie przekazywania argumentu przez wartość (Visual Basic)

Koncepcje

Procedury w Visual Basic

Parametry i argumenty procedur (Visual Basic)

Przekazywanie argumentów według wartości i według odwołania (Visual Basic)

Różnice pomiędzy argumentami modyfikowalnymi i niemodyfikowalnymi (Visual Basic)

Różnice pomiędzy przekazywaniem argumentu według wartości i według odwołania (Visual Basic)

Przekazywanie argumentów według pozycji i według nazwy (Visual Basic)

Typy wartości i odwołań