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é
- Procedury
- Parametry a argumenty procedury
- Postupy: Předání argumentů proceduře
- Předávání argumentů podle hodnoty a reference
- Rozdíly mezi upravitelnými a neupravitelnými argumenty
- Rozdíly mezi předáním argumentu podle hodnoty a podle reference
- Postupy: Změna hodnoty argumentu procedury
- Postupy: Ochrana argumentu procedury před změnami hodnoty
- Předávání argumentů podle pozice a názvu
- Typy hodnot a odkazové typy