Sdílet prostřednictvím


Postupy: Změna hodnoty 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ý 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

  1. Určit v deklaraci procedury ByRef (Visual Basic) parametru odpovídající argument.

  2. V volající kód předáte jako argument upravitelné programovací element.

  3. Volající kód neuvádějte argument v závorkách v seznamu argumentů.

  4. 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

  1. 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.

  2. 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 Postupy: Ochrana argumentu procedury proti změnám hodnoty (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 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

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

Postupy: Ochrana argumentu procedury proti změnám hodnoty (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