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

V Visual Basic, postup lze předat argument hodnotou nebo podle.Říká se mechanismus předávání, a určuje, zda postup změnit programovací element základní argument ve volání kódu.Prohlášení postup předávání mechanismus pro každý parametr určuje zadáním ByVal (Visual Basic) nebo ByRef (Visual Basic) klíčové slovo.

Vyznamenání

Při předávání argumentu procedury, nezapomeňte několik různých vyznamenání, které vzájemně spolupracují:

  • Zda je podkladové programovací element měnit nebo nonmodifiable

  • Zda je argument sám měnit nebo nonmodifiable

  • Zda je argument předaný hodnotou nebo odkazem

  • Zda je datový typ argument typ hodnotu nebo odkaz

Další informace naleznete v tématu Rozdíly mezi upravitelnými a neupravitelnými argumenty (Visual Basic) a Rozdíly mezi předáním argumentu podle hodnoty a podle reference (Visual Basic).

Volba mechanismus předávání

Zvolte mechanismus předávání pečlivě pro každý argument.

  • Ochrana.Nejdůležitějším kritériem při volbě mezi dvěma mechanizmy je expozice volání proměnné změnit.Výhodou předání argumentu ByRef je, že procedura může vrátit hodnotu volajícího kódu pomocí argumentu.Výhodou předání argumentu ByVal je chrání proměnné změně postupem.

  • Výkon.Přestože mechanismus předávání může ovlivnit výkon vašeho kódu, je obvykle zanedbatelný rozdíl.Jedinou výjimkou je typ hodnoty předané ByVal.V tomto případě Visual Basic zkopíruje obsah celé datové argument.Proto velké hodnoty typu například struktury, může být efektivnější předá ByRef.

    Pro referenční typy je ukazatel na data zkopírovaná (čtyři bajty na 32bitových platformách osm bajtů na 64bitové platformy).Proto můžete předat argumenty typu String nebo Object hodnotou bez poškozování výkonu.

Stanovení mechanismus předávání

Určuje postup prohlášení mechanismus předávání pro každý parametr.Nelze přepsat volání kódu ByVal mechanismu.

Pokud parametr s ByRef, volající kód může vynutit mechanismus na ByVal uzavřením argument názvu v závorkách volání.Další informace naleznete v tématu Postupy: Vynucení předání argumentu podle hodnoty (Visual Basic).

Výchozí nastavení v Visual Basic je předat argumenty podle hodnoty.

Při předání hodnotou argumentu

  • Pokud volající kód prvek základní argument nonmodifiable element, prohlásit odpovídající parametr ByVal (Visual Basic).Žádný kód můžete změnit hodnotu nonmodifiable prvek.

  • Pokud je základní prvek upravitelná, ale nechcete postup moci změnit její hodnotu, deklarovat parametr ByVal.Volání kódu můžete změnit hodnotu elementu upravitelné předán podle hodnoty.

Pokud Argument předat podle odkazu

  • Postup má originální nutnost změnit základní prvek volajícího kódu, prohlásit odpovídající parametr ByRef (Visual Basic).

  • Pokud správné provádění kódu závisí na postup Změna základní prvek volajícího kódu, deklarovat parametr ByRef.Pokud předáte hodnotu nebo pokud volající kód přepíše ByRef mechanismus předávání uzavřením argument v závorkách, volání procedury může vést k neočekávaným výsledkům.

Příklad

Description

Následující příklad ukazuje, kdy hodnota předat argumenty a kdy je předat podle odkazu.Postup Calculate má i ByVal a ByRef parametr.Dané úrokové sazby, ratea peněžní částky, debt, je úkol postupu výpočtu nové hodnoty debt je výsledkem použití úrokové sazby na původní hodnotu debt.Protože debt je ByRef parametr, nová celkem se projeví v hodnotu argumentu v volající kód, který odpovídá debt.Parametr rate je ByVal parametr protože Calculate neměli měnit její hodnotu.

Kód

Module Module1

    Sub Main()
        ' Two interest rates are declared, one a constant and one a  
        ' variable. 
        Const highRate As Double = 12.5
        Dim lowRate = highRate * 0.6

        Dim initialDebt = 4999.99
        ' Make a copy of the original value of the debt. 
        Dim debtWithInterest = initialDebt

        ' Calculate the total debt with the high interest rate applied. 
        ' Argument highRate is a constant, which is appropriate for a  
        ' ByVal parameter. Argument debtWithInterest must be a variable 
        ' because the procedure will change its value to the calculated 
        ' total with interest applied.
        Calculate(highRate, debtWithInterest)
        ' Format the result to represent currency, and display it. 
        Dim debtString = Format(debtWithInterest, "C")
        Console.WriteLine("What I owe with high interest: " & debtString)

        ' Repeat the process with lowRate. Argument lowRate is not a  
        ' constant, but the ByVal parameter protects it from accidental 
        ' or intentional change by the procedure.  

        ' Set debtWithInterest back to the original value.
        debtWithInterest = initialDebt
        Calculate(lowRate, debtWithInterest)
        debtString = Format(debtWithInterest, "C")
        Console.WriteLine("What I owe with low interest:  " & debtString)
    End Sub 

    ' Parameter rate is a ByVal parameter because the procedure should 
    ' not change the value of the corresponding argument in the  
    ' calling code.  

    ' The calculated value of the debt parameter, however, should be 
    ' reflected in the value of the corresponding argument in the  
    ' calling code. Therefore, it must be declared ByRef.  
    Sub Calculate(ByVal rate As Double, ByRef debt As Double)
        debt = debt + (debt * rate / 100)
    End Sub 

End Module

Viz také

Úkoly

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

Postupy: Změna hodnoty argumentu procedury (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 pozice a názvu (Visual Basic)

Typy hodnot a typy odkazu