Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
ByValv 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
ByRefv 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é
- Procedury
- Parametry procedury a argumenty
- Postupy: Předání argumentů do procedury
- Předávání argumentů podle hodnoty a odkazu
- Rozdíly mezi upravitelnými a neupravitelnými argumenty
- Rozdíly mezi předáváním argumentu podle hodnoty a odkazem
- Postupy: Změna hodnoty argumentu procedury
- Postupy: Ochrana argumentu procedury před změnami hodnot
- Předávání argumentů podle pozice a názvu
- Typy hodnot a odkazové typy