Sdílet prostřednictvím


Postupy: Ochrana argumentu procedury proti změnám hodnoty (Visual Basic)

Pokud postup deklaruje parametr jako 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 Postupy: Vynucení předání argumentu podle hodnoty (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 ByRef (Visual Basic) každý parametr prohlášených klíčové slovo.Kód tím snadněji číst.

Viz také

Úkoly

Postupy: Předání argumentů proceduře (Visual Basic)

Postupy: Změna hodnoty argumentu procedury (Visual Basic)

Postupy: Vynucení předání argumentu podle hodnoty (Visual Basic)

Koncepty

Procedury v jazyce Visual Basic

Parametry a argumenty procedury (Visual Basic)

Předávání argumentů podle hodnoty a odkazu (Visual Basic)

Rozdíly mezi upravitelnými a neupravitelnými argumenty (Visual Basic)

Rozdíly mezi předáním argumentu podle hodnoty a podle reference (Visual Basic)

Předávání argumentů podle pozice a názvu (Visual Basic)

Typy hodnot a typy odkazu