Jak: Změňte hodnotu argumentu procedury (Visual Basic)
Při volání procedury každý argument zadáte odpovídá jednomu parametry definované v postupu.V některých případech kód postupu můžete změnit hodnotu podkladových argument volající kód.V ostatních případech postupem lze změnit pouze jeho místní kopie argument.
Při volání procedury, Visual Basic vytvoří místní kopii každé argument, který je předán ByVal (Visual Basic).Každý argument předaný Parametr ByRef (Visual Basic), Visual Basic poskytuje přímý odkaz na programovací element podkladových argument volající kód kód postupu.
Pokud je základní prvek v volající kód upravitelné prvku a je předán argument ByRef, kód postup můžete použít přímý odkaz změnit hodnotu prvku v volající kód.
Změna podkladové hodnoty
Změna základní hodnota argumentu procedury v volající kód
Určit v deklaraci procedury Parametr ByRef (Visual Basic) parametru odpovídající argument.
V volající kód předáte jako argument upravitelné programovací element.
Volající kód neuvádějte argument v závorkách v seznamu argumentů.
Kód postupu pomocí názvu parametru přiřadit hodnotu základní prvek v volající kód.
Viz příklad dále ukázku.
Změna místních kopií
Základní prvek v volající kód je nonmodifiable prvek nebo pokud je předán argument ByVal, postup jeho hodnoty volající kód nelze změnit.Postup však můžete změnit jeho místní kopii takové argument.
Změna kopie argumentu procedury v kódu postup
Určit v deklaraci procedury ByVal (Visual Basic) parametru odpovídající argument.
-nebo-
Volající kód uzavřete argument v závorkách v seznamu argumentů.Tento příznak vynutí Visual Basic předat argument hodnotu i v případě, že odpovídající parametru ByRef.
Kód postupu pomocí názvu parametru přiřadit hodnotu místní kopie argument.Zadaná hodnota kódu volajícího se nezmění.
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.
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)))
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): 101, 201, 301".Protože n je ByRef, replace můžete změnit proměnné n volající kód a přiřadit jí nové pole.Protože n je typ odkazu, replace můžete také změnit jeho členů.
Můžete zabránit postup změny v volající kód samotný proměnné.Viz téma Jak: chránit postup Argument proti změny hodnot (Visual Basic).
Probíhá kompilace kódu
Když předáte proměnnou odkazem, musíte použít ByRef klíčové slovo zadat tento mechanismus.
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.
Zabezpečení
Změnit hodnotu argumentu volající kód základní postup, který umožňuje vždy existuje potenciální riziko.Zkontrolujte, zda že očekávat tuto hodnotu změnit, a připravit zkontrolovat platnost před jeho použitím.
Viz také
Úkoly
Jak: předat argumenty procedury (Visual Basic)
Jak: chránit postup Argument proti změny hodnot (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)