Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pokud procedura deklaruje parametr jako ByRef, visual Basic poskytuje kód procedury přímý odkaz na programovací prvek, který je základem argumentu ve volajícím kódu. To umožňuje, aby procedura změnila hodnotu, která je základem argumentu ve volajícím kódu. V některých případech může volající kód chtít chránit proti takové změně.
Argument můžete vždy chránit před změnou deklarací odpovídajícího parametru ByVal v postupu. Pokud chcete mít možnost změnit daný argument v některých případech, ale ne jiné, můžete ho ByRef deklarovat a nechat volající kód určit předávací mechanismus v každém volání. Udělá se to tak, že uzavřete odpovídající argument do závorek, aby se předal hodnotou, nebo ho neuzavřete do závorek, aby se předal odkazem. Další informace naleznete v tématu Postupy: Vynucení předání argumentu hodnotou.
Příklad
Následující příklad ukazuje dva postupy, které přebírají proměnnou pole a pracují s jeho prvky. Procedura increase jednoduše přidá jeden do každého prvku. Procedura replace přiřadí parametru a() nové pole a pak přidá jedno do každého prvku. Opětovné přiřazení však nemá vliv na podkladovou proměnnou pole ve volajícím kódu.
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)))
První MsgBox volání zobrazí "Po navýšení (n): 11, 21, 31, 41". Protože pole n je referenčním typem, increase může změnit její členy, i když je mechanismus ByVal předávání.
Druhé MsgBox volání zobrazí "Po nahrazení (n): 11, 21, 31, 41". Protože n je předán ByVal, replace nelze upravit proměnnou n ve volajícím kódu přiřazením nového pole. Když replace vytvoří novou instanci k pole a přiřadí ji k místní proměnné a, ztratí odkaz n předávaný volajícím kódem. Když změní členy a, ovlivní to pouze místní pole k.
replace Proto nezvýšuje hodnoty pole n ve volajícím kódu.
Kompilace kódu
Výchozí hodnota v jazyce Visual Basic je předání argumentů podle hodnoty. Je však dobrým programátorským zvykem zahrnout klíčové slovo ByVal nebo ByRef u každého deklarovaného parametru. Díky tomu se kód snadněji čte.
Viz také
- Procedury
- Parametry procedury a argumenty
- Postupy: Předání argumentů do procedury
- Předávání argumentů podle hodnoty a odkazu
- Rozdíly mezi upravitelnými a neupravitelnými argumenty
- Rozdíly mezi předáváním argumentu podle hodnoty a odkazem
- Postupy: Změna hodnoty argumentu procedury
- Jak: Vynutit předání argumentu hodnotou
- Předávání argumentů podle pozice a názvu
- Typy hodnot a odkazové typy