Jak: chránit postup Argument proti změny hodnot (Visual Basic)
Pokud postup deklaruje parametr jako Parametr ByRef (Visual Basic), Visual Basic poskytuje přímý odkaz na programovací element podkladových argument volající kód kód postupu.To umožňuje postupem změnit hodnotu podkladových argument volající kód.V některých případech volající kód chtít chránit proti takové změny.
Argument lze vždy chránit před změnou deklarováním odpovídajícího parametru ByVal (Visual Basic) v postupu.Pokud chcete změnit určitý argument v některých případech ale jiné ne, můžete deklarovat ByRef a umožňují určit mechanismus předávání v každé volání volající kód.Je to orámování odpovídající argument v závorkách k předání hodnotou nebo není uveden v závorkách k předání odkazem.Další informace naleznete v tématu Jak: Vynutit Argument předání hodnotou (Visual Basic).
Příklad
Následující příklad ukazuje dva postupy, které přijme proměnné array a pracovat na jeho prvky.increase Postupem jednoduše přidáte jednu pro každý prvek.replace Postup přiřadí nové pole parametru a() a pak přidá do každého prvku.Opětovné přiřazení proměnné podkladové pole v volající kód neovlivní.
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 increase(n): 11, 21, 31, 41".Protože matice n je typ odkazu, replace můžete změnit jeho členů, i když je mechanismus předávání ByVal.
Druhý MsgBox volání zobrazí "po replace(n): 11, 21, 31, 41".Protože n je ByVal, replace nelze změnit proměnné n v volající kód přiřazením nové pole.Při replace vytvoří novou instanci array k a přiřadí místní proměnné a, ztratí odkaz na n předaná volající kód.Po změně členů a, místní pole k je ovlivněna.Proto replace hodnoty pole se nezvyšuje n v volající kód.
Probíhá kompilace kódu
Výchozí v Visual Basic je předat argumenty podle hodnoty.Je však dobré praxe zahrnout buď programování ByVal (Visual Basic) nebo Parametr ByRef (Visual Basic) každý parametr prohlášených klíčové slovo.Kód tím snadněji číst.
Viz také
Úkoly
Jak: předat argumenty procedury (Visual Basic)
Jak: Změňte hodnotu argumentu procedury (Visual Basic)
Jak: Vynutit Argument předání hodnotou (Visual Basic)
Koncepty
Procedury v jazyce Visual Basic
Postup parametry a argumenty (Visual Basic)
Předávání argumentů hodnotou a odkaz (Visual Basic)
Rozdíly mezi argumenty upravitelné a Nonmodifiable (Visual Basic)
Rozdíly mezi předáním Argument hodnotu a odkaz (Visual Basic)