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
- Vorgehensweisen
- Parameter und Argumente von Prozeduren
- Vorgehensweise: Übergeben von Argumenten an eine Prozedur
- Übergeben von Argumenten als Wert und als Verweis
- Unterschiede zwischen veränderbaren und nicht veränderbaren Argumenten
- Vorgehensweise: Ändern des Werts eines Prozedurarguments
- Vorgehensweise: Schützen eines Prozedurarguments gegen Wertänderungen
- Vorgehensweise: Erzwingen, dass ein Argument als Wert übergeben wird
- Übergeben von Argumenten nach Position und Name
- Value Types and Reference Types