Freigeben über


Unterschiede zwischen der Übergabe eines Arguments nach Wert und nach 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 nach Verweis , indem Sie das ByRef-Schlüsselwort für den entsprechenden Parameter in der Prozedurdefinition angeben. Wenn Sie diesen Übergabemechanismus verwenden, gibt Visual Basic der Prozedur einen direkten Verweis auf das zugrunde liegende Programmierelement im aufrufenden Code.

Übertragungsmechanismus und Elementtyp

Die Auswahl des Übergabemechanismus entspricht nicht der Klassifizierung des zugrunde liegenden Elementtyps. Die Übergabe durch Wert oder durch Referenz bezieht sich darauf, was Visual Basic dem Prozedurcode übergibt. Ein Werttyp oder Bezugstyp bezieht sich auf die Speicherung eines Programmierelements im Arbeitsspeicher.

Der Übergabemechanismus und der Elementtyp sind jedoch miteinander verknüpft. Der Wert eines Bezugstyps ist ein Zeiger auf die Daten an anderer Stelle im Arbeitsspeicher. Dies bedeutet, dass der Prozedurcode, wenn Sie einen Verweistyp nach Wert übergeben, einen Zeiger auf die Daten des zugrunde liegenden Elements hat, auch wenn er nicht auf das zugrunde liegende Element selbst zugreifen kann. Wenn es sich bei dem Element beispielsweise um eine Arrayvariable handelt, hat der Prozedurcode keinen Zugriff auf die Variable selbst, kann aber auf die Arrayelemente zugreifen.

Möglichkeit zum Ändern

Wenn Sie ein nicht modifizierbares Element als Argument übergeben, kann die Prozedur es niemals im aufrufenden Code ändern, unabhängig davon, ob es übergeben ByVal wird.ByRef

Bei einem modifizierbaren Element fasst die folgende Tabelle die Interaktion zwischen dem Elementtyp und dem Übergabemechanismus zusammen.

Elementtyp ByVal übergeben ByRef übergeben
Werttyp (enthält nur einen Wert) Die Prozedur kann die Variable oder eines seiner Member nicht ändern. Die Prozedur kann die Variable und ihre Mitglieder ändern.
Bezugstyp (enthält einen Zeiger auf eine Klasse oder Strukturinstanz) Die Prozedur kann die Variable nicht ändern, aber Elemente der Instanz ändern, auf die sie verweist. Die Prozedur kann die Variable und die Mitglieder der Instanz ändern, auf die sie verweist.

Siehe auch