Sdílet prostřednictvím


Rozdíly mezi předáváním argumentu pomocí hodnoty a pomocí 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 předávacího mechanismu Visual Basic poskytuje proceduru přímým odkazem na základní programovací prvek ve volajícím kódu.

Mechanismus předávání a typ elementu

Volba mechanismu předávání není stejná jako klasifikace základního typu elementu. Předání hodnotou nebo odkazem znamená, co Visual Basic předává procedurálnímu kódu. 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 referenční typ hodnotou, kód procedury má ukazatel na data podkladového prvku, i když nemá přímý přístup k 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 nemodifikovatelný prvek jako argument, procedura ho ve volajícím kódu nikdy nemůže upravit, ať už je předán ByVal nebo ByRef.

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

Typ prvku Prošel ByVal Prošel 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é