Sdílet prostřednictvím


Postupy: Vynucení předání argumentu podle hodnoty (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 základní prvek proti takové změně, můžete přepsat ByRef mechanismus předávání ve volání procedury uzavř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é síly ByVal, všimněte si 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áte proměnnou odkazem, musíte k určení tohoto mechanismu použít ByRef klíčové slovo.

Výchozí hodnota v jazyce Visual Basic je předání argumentů podle hodnoty. Je však vhodné programování zahrnout klíčové slovo ByVal nebo ByRef s každým deklarovaným parametrem. 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. Před použitím této hodnoty se ujistěte, že se má tato hodnota změnit, a připravte se na jeho platnost.

Viz také