Unterschiede zwischen dem Übergeben von Argumenten als Wert und als Verweis (Visual Basic)
Wenn Sie einer Prozedur ein oder mehrere Argumente übergeben, ist jedes Argument einem zugrunde liegenden Programmierelement im Aufrufcode zugeordnet. Sie können entweder den Wert dieses zugrunde liegenden Elements oder einen Verweis darauf übergeben. Dies wird als Übergabemechanismus bezeichnet.
Übergabe als Wert
Sie übergeben ein Argument als Wert, indem Sie das ByVal (Visual Basic)-Schlüsselwort für den entsprechenden Parameter in der Prozedurdefinition angeben. Bei Verwendung dieses Übergabemechanismus kopiert Visual Basic den Wert des zugrunde liegenden Programmierelements in eine lokale Variable der Prozedur. Der Prozedurcode hat keinen Zugriff auf das zugrunde liegende Element im Aufrufcode.
Übergabe als Verweis
Sie übergeben ein Argument als Verweis, indem Sie das ByRef (Visual Basic)-Schlüsselwort für den entsprechenden Parameter in der Prozedurdefinition angeben. Bei Verwendung dieses Übergabemechanismus übergibt Visual Basic im Aufrufcode einen direkten Verweis auf das zugrunde liegende Programmierelement an die Prozedur.
Übergabemechanismus und Elementtyp
Die Auswahl des Übergabemechanismus ist nicht das Gleiche wie die Klassifizierung des zugrunde liegenden Elementtyps. Die Übergabe als Wert oder als Verweis bezieht sich darauf, was Visual Basic für den Prozedurcode bereitstellt. Ein Werttyp oder ein Verweistyp verweist darauf, wie ein Programmierelement im Arbeitsspeicher gespeichert wird.
Es besteht jedoch ein Zusammenhang zwischen Übergabemechanismus und Elementtyp. Der Wert eines Verweistyps ist ein Zeiger auf die Daten, die sich an einer anderen Position im Arbeitsspeicher befinden. Das bedeutet, dass der Prozedurcode bei der Übergabe eines Referenztyps als Wert über einen Zeiger auf die Daten des zugrunde liegenden Elements verfügt, auch wenn er nicht auf das zugrunde liegende Programmierelement selbst zugreifen kann. Wenn das Element beispielsweise eine Arrayvariable ist, hat der Prozedurcode keinen Zugriff auf die eigentliche Variable, aber er kann auf die Arraymember zugreifen.
Änderungsmöglichkeit
Ein als Argument übergebenes nicht veränderbares Element kann von der Prozedur nie im Aufrufcode geändert werden. Dabei spielt es keine Rolle, ob es mit ByVal oder ByRef übergeben wurde.
In der folgenden Tabelle wird die Interaktion zwischen dem Elementtyp und dem Übergabemechanismus bei änderbaren Elementen dargestellt.
Elementtyp |
Übergabe mit ByVal |
Übergabe mit ByRef |
---|---|---|
Werttyp (enthält nur einen Wert) |
Die Variable und ihre Member können in der Prozedur nicht geändert werden. |
Die Variable und ihre Member können in der Prozedur geändert werden. |
Verweistyp (enthält einen Zeiger auf eine Klassen- oder Strukturinstanz) |
Die Prozedur kann die Variable nicht ändern, jedoch die Member der Instanz, auf die sie zeigt. |
Die Variable und die Member der Instanz, auf die sie zeigt, können in der Prozedur geändert werden. |
Siehe auch
Aufgaben
Gewusst wie: Übergeben von Argumenten an eine Prozedur (Visual Basic)
Gewusst wie: Ändern des Werts eines Prozedurarguments (Visual Basic)
Gewusst wie: Schützen eines Prozedurarguments gegen Wertänderungen (Visual Basic)
Gewusst wie: Erzwingen, dass ein Argument als Wert übergeben wird (Visual Basic)
Konzepte
Parameter und Argumente von Prozeduren (Visual Basic)
Übergeben von Argumenten als Wert und als Verweis (Visual Basic)
Unterschiede zwischen veränderbaren und nicht veränderbaren Argumenten (Visual Basic)
Übergeben von Argumenten nach Position und Name (Visual Basic)