Sdílet prostřednictvím


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

Deklarace procedury určuje předávací mechanismus. Pokud je parametr deklarován byRef, Visual Basic očekává předání odpovídajícího argumentu odkazem. To umožňuje postupem změnit hodnotu programovacího prvku, který je základem argumentu ve volajícím kódu. Pokud chcete chránit objekt proti změně, můžete přepsat mechanismus předávání ByRef ve volání procedury zapouzdřením názvu argumentu do závorek. Tyto závorky jsou kromě závorek ohraničující seznam argumentů ve volání.

Volající kód nemůže přepsat mechanismus ByVal .

Vynucení předání argumentu hodnotou

  • Pokud je odpovídající parametr deklarován ByVal v postupu, nemusíte provádět žádné další kroky. Jazyk Visual Basic již očekává předání argumentu podle hodnoty.

  • Pokud je odpovídající parametr deklarován ByRef v postupu, uzavřete argument do závorek ve volání procedury.

Příklad

Následující příklad přepíše deklaraci parametru ByRef . Ve volání, které vynucuje ByVal, si všimněte dvou úrovní závorek.

Sub setNewString(ByRef inString As String)
    inString = "This is a new value for the inString argument."
    MsgBox(inString)
End Sub
Dim str As String = "Cannot be replaced if passed ByVal"

' The following call passes str ByVal even though it is declared ByRef.
Call setNewString((str))
' The parentheses around str protect it from change.
MsgBox(str)

' The following call allows str to be passed ByRef as declared.
Call setNewString(str)
' Variable str is not protected from change.
MsgBox(str)

Pokud str je v seznamu argumentů uzavřena do dalších závorek, setNewString procedura nemůže změnit jeho hodnotu ve volajícím kódu a MsgBox zobrazí "Nelze nahradit, pokud je předán ByVal". Pokud str není uzavřena do nadbytečných závorek, procedura ji může změnit a MsgBox zobrazí "Toto je nová hodnota pro argument inString".

Kompilace kódu

Když předáváte proměnnou odkazem, musíte použít klíčové slovo ByRef k určení tohoto mechanismu.

Výchozí hodnota v jazyce Visual Basic je předání argumentů podle hodnoty. Je však dobrým programátorským zvykem zahrnout klíčové slovo ByVal nebo ByRef u každého deklarovaného parametru. Díky tomu se kód snadněji čte.

Robustní programování

Pokud procedura deklaruje parametr ByRef, správné spuštění kódu může záviset na schopnosti změnit základní prvek ve volajícím kódu. Pokud volající kód přepíše tento volající mechanismus uzavřením argumentu do závorek nebo pokud předá neupravitelný argument, procedura nemůže změnit základní prvek. To může vést k neočekávaným výsledkům volání kódu.

Zabezpečení rozhraní .NET Framework

Existuje vždy potenciální riziko, že procedura může změnit hodnotu podkladového argumentu ve volajícím kódu. Ujistěte se, že očekáváte změnu této hodnoty, a připravte se ověřit její platnost před použitím.

Viz také