Unterschiede zwischen dem Übergeben von Argumenten als Wert und als Verweis (Visual Basic)

Wenn Sie ein oder mehrere Argumente an eine Prozedur übergeben, entspricht jedes Argument einem zugrunde liegenden Programmierelement im aufrufenden Code. Sie können entweder den Wert dieses zugrunde liegenden Elements oder einen Verweis darauf übergeben. Dies wird als Übergabemechanismus bezeichnet.

Übergeben als Wert

Sie übergeben ein Argument als Wert, indem Sie das ByVal-Schlüsselwort für den entsprechenden Parameter in der Prozedurdefinition angeben. Wenn Sie diesen Übergabemechanismus verwenden, kopiert Visual Basic den Wert des zugrunde liegenden Programmierelements in eine lokale Variable in der Prozedur. Der Prozedurcode hat keinen Zugriff auf das zugrunde liegende Element im aufrufenden Code.

Übergeben durch Verweis

Sie übergeben ein Argument als Verweis, indem Sie das ByRef-Schlüsselwort für den entsprechenden Parameter in der Prozedurdefinition angeben. Wenn Sie diesen Übergabemechanismus verwenden, weist Visual Basic der Prozedur einen direkten Verweis auf das zugrunde liegende Programmierelement im aufrufenden Code zu.

Übergabemechanismus und Elementtyp

Die Wahl des Übergabemechanismus ist nicht mit der Klassifizierung des zugrunde liegenden Elementtyps identisch. Die Übergabe als Wert oder Verweis bezieht sich auf das, was Visual Basic dem Prozedurcode bereitstellt. Ein Wert- oder Verweistyp bezieht sich darauf, wie ein Programmierelement im Arbeitsspeicher gespeichert wird.

Übergabemechanismus und Elementtyp hängen jedoch miteinander zusammen. Der Wert eines Verweistyps ist ein Zeiger auf die Daten an anderer Stelle im Arbeitsspeicher. Das bedeutet Folgendes: Wenn Sie einen Verweis als Wert übergeben, verfügt der Prozedurcode über einen Zeiger auf die Daten des zugrundeliegenden Elements, auch wenn er selbst keinen Zugriff auf das zugrundeliegende Element hat. Wenn es sich bei dem Element beispielsweise um eine Arrayvariable handelt, hat der Prozedurcode keinen Zugriff auf die Variable selbst, aber er kann auf die Arrayelemente zugreifen.

Möglichkeit zur Änderung

Wenn Sie ein nicht veränderbares Element als Argument übergeben, kann die Prozedur es nicht im aufrufenden Code ändern, und zwar unabhängig davon, ob es ByVal oder ByRef übergeben wird.

Für ein veränderbares Element ist in der folgenden Tabelle die Interaktion zwischen Elementtyp und Übergabemechanismus zusammengefasst.

Elementtyp ByVal übergeben ByRef übergeben
Werttyp (enthält nur einen Wert) Die Prozedur kann die Variable oder keinen ihrer Member ändern. Die Prozedur kann die Variable oder ihre Member ändern.
Verweistyp (enthält einen Zeiger auf eine Klassen- oder Strukturinstanz) Die Prozedur kann nicht die Variable, aber Member der Instanz ändern, auf die sie verweist. Die Prozedur kann die Variable und Member der Instanz ändern, auf die sie verweist.

Weitere Informationen