Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 swoją 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 ByRef Visual Basic zapewnia kodowi procedury bezpośrednie odwołanie do elementu programistycznego, na którym opiera się argument 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
W deklaracji procedury określ ByRef dla parametru odpowiadającego argumentowi.
W kodzie wywołującym przekaż modyfikowalny element programowania jako argument.
W kodzie wywołującym nie należy ująć argumentu w nawiasach na liście argumentów.
W kodzie procedury użyj nazwy parametru, aby przypisać wartość do bazowego elementu w kodzie wywołującym.
Zobacz przykład niżej, aby zapoznać się z demonstracją.
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ć swoją lokalną kopię takiego argumentu.
Aby zmienić kopię argumentu procedury w kodzie procedury
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. W języku Visual Basic spowoduje to wymuszenie przekazania argumentu przez wartość, nawet jeśli odpowiadający mu parametr określa
ByRef.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 "After increase(n): 11, 21, 31, 41". Ponieważ tablica n jest typem referencyjnym, replace może zmienić swoje składowe, mimo że mechanizm przekazywania to ByVal.
Drugie MsgBox wywołanie wyświetla komunikat "After replace(n): 101, 201, 301". Ponieważ n został przekazany obok ByRef, replace może modyfikować 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 programu .NET Framework
Zawsze istnieje potencjalne ryzyko, że procedura zmieni wartość powiązaną z argumentem w kodzie, który wywołuje. Przed użyciem tej wartości upewnij się, że ta wartość zostanie zmieniona i przygotuj się do sprawdzenia jej ważności.
Zobacz także
- Procedury
- Parametry i argumenty procedury
- Instrukcje: przekazywanie argumentów do procedury
- Przekazywanie argumentów przez wartość i przez referencję
- Różnice między argumentami modyfikowalnymi i niemodyfikowalnymi
- Różnice między przekazywaniem argumentu według wartości a odwołaniem
- Instrukcje: ochrona argumentu procedury przed zmianami wartości
- Jak wymusić przekazanie argumentu przez wartość
- Przekazywanie argumentów według pozycji i według nazwy
- typy wartości i typy referencyjne