Sdílet prostřednictvím


Rozdíly mezi předáním argumentu podle hodnoty a podle reference (Visual Basic)

Když předáte jeden nebo více argumentů do procedury, každý argument odpovídá základnímu programovacímu prvku ve volajícím kódu. Můžete předat buď hodnotu tohoto podkladového prvku, nebo odkaz na něj. To se označuje jako předávací mechanismus.

Předávání podle hodnoty

Argument předáte hodnotou zadáním klíčového slova ByVal pro odpovídající parametr v definici procedury. Při použití tohoto mechanismu předávání visual Basic zkopíruje hodnotu základního programovacího prvku do místní proměnné v postupu. Kód procedury nemá žádný přístup k základnímu prvku ve volajícím kódu.

Předávání podle odkazu

Argument předáte odkazem zadáním klíčového slova ByRef pro odpovídající parametr v definici procedury. Při použití tohoto mechanismu předávání jazyka Visual Basic poskytuje proceduru přímý odkaz na základní programovací prvek ve volajícím kódu.

Předávání mechanismu a typu elementu

Volba mechanismu předávání není stejná jako klasifikace základního typu elementu. Předání podle hodnoty nebo odkazu odkazuje na to, co Visual Basic poskytuje kódu procedury. Typ hodnoty nebo typ odkazu odkazuje na způsob, jakým je programovací prvek uložen v paměti.

Předávací mechanismus a typ elementu ale souvisí. Hodnota referenčního typu je ukazatel na data jinde v paměti. To znamená, že když předáte typ odkazu podle hodnoty, kód procedury má ukazatel na data podkladového prvku, i když nemůže získat přístup k samotnému podkladovému prvku. Pokud je například element proměnnou pole, kód procedury nemá přístup k samotné proměnné, ale má přístup k členům pole.

Možnost úpravy

Když předáte neupravitelný prvek jako argument, procedura nemůže nikdy upravit v volajícím kódu, ať už je předána ByVal nebo ByRef.

Pro upravitelný prvek následující tabulka shrnuje interakci mezi typem elementu a předávacím mechanismem.

Typ prvku Předán ByVal Předán ByRef
Typ hodnoty (obsahuje pouze hodnotu) Procedura nemůže změnit proměnnou ani její členy. Postup může změnit proměnnou a její členy.
Typ odkazu (obsahuje ukazatel na instanci třídy nebo struktury) Procedura nemůže změnit proměnnou, ale může změnit členy instance, na kterou odkazuje. Postup může změnit proměnnou a členy instance, na kterou odkazuje.

Viz také