Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
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)