Übergeben von Argumenten als Wert und als Verweis
Aktualisiert: November 2007
In Visual Basic kann ein Argument als Wert oder als Verweis an eine Prozedur übergeben werden. Dies wird als Übergabemechanismus bezeichnet und legt fest, ob die Prozedur das Programmelement, das dem Argument im Aufrufcode zugrunde liegt, ändern kann. In der Prozedurdeklaration wird der Übergabemechanismus durch die Angabe des ByVal-Schlüsselworts oder ByRef-Schlüsselworts für jeden Parameter festgelegt.
Unterscheidungen
Wenn ein Argument an eine Prozedur übergeben wird, sind verschiedene Unterscheidungen zu beachten, zwischen denen eine Wechselwirkung besteht:
Ob das zugrunde liegende Programmierelement änderbar oder nicht veränderbar ist
Ob das Argument selbst änderbar oder nicht veränderbar ist
Ob das Argument als Wert oder als Verweis übergeben wird
Ob der Argumentdatentyp ein Werttyp oder ein Verweistyp ist
Weitere Informationen finden Sie unter Unterschiede zwischen veränderbaren und nicht veränderbaren Argumenten und unter Unterschiede zwischen dem Übergeben von Argumenten als Wert und als Verweis.
Wahl des Übergabemechanismus
Sie sollten den Übergabemechanismus für jedes Argument sorgfältig auswählen.
Schutz. Bei der Wahl eines der beiden Übergabemechanismen fällt vor allem ins Gewicht, ob die Aufrufvariablen geändert werden dürfen oder nicht. Der Vorteil der Argumentübergabe ByRef besteht darin, dass die Prozedur durch dieses Argument einen Wert an den Aufrufcode zurückgeben kann. Der Vorteil der Argumentübergabe ByVal besteht darin, dass die Variable vor Änderungen durch die Prozedur geschützt wird.
Leistung. Möglicherweise wirkt sich der Übergabemechanismus auf die Leistung des Codes aus, jedoch ist dies normalerweise unbedeutend. Eine Ausnahme bildet ein ByVal übergebener Werttyp. Hier kopiert Visual Basic den gesamten Dateninhalt des Arguments. Deshalb kann die Übergabe ByRef bei umfassenden Werttypen wie Strukturen effizienter sein.
Bei Verweistypen wird lediglich der Zeiger auf die Daten kopiert (vier Bytes bei 32-Bit-Plattformen, acht Bytes bei 64-Bit-Plattformen). Deshalb können Argumente vom Typ String oder vom Typ Object ohne Leistungseinbußen als Wert übergeben werden.
Bestimmen des Übergabemechanismus
Die Prozedurdeklaration gibt den Übergabemechanismus für jeden Parameter an. Der Aufrufcode kann den ByVal-Mechanismus nicht überschreiben. Wenn ein Argument jedoch mit ByRef deklariert wird, kann der Aufrufcode den ByVal-Mechanismus erzwingen, indem der Argumentname im Aufruf in runde Klammern gesetzt wird.
Standardmäßig werden Argumente in Visual Basic als Wert übergeben. Sie können den Code besser lesbar machen, indem Sie das ByVal-Schlüsselwort verwenden. Es gilt als guter Programmierstil, das ByVal-Schlüsselwort oder das ByRef-Schlüsselwort für jeden deklarierten Parameter anzugeben.
Wann ein Argument als Wert übergeben werden sollte
Wenn das aufrufende Codeelement, das dem Argument zugrunde liegt, ein nicht veränderbares Element ist, deklarieren Sie den entsprechenden Parameter mit ByVal. Der Wert eines nicht veränderbaren Elements kann nicht geändert werden.
Wenn das zugrunde liegende Element änderbar ist, die Prozedur dessen Wert aber nicht ändern können soll, deklarieren Sie den Parameter mit ByVal. Nur der Aufrufcode kann den Wert eines änderbaren Elements ändern, das als Wert übergeben wird.
Wann ein Argument als Verweis übergeben werden sollte
Falls die Prozedur das zugrunde liegende Element im Aufrufcode unbedingt ändern können muss, deklarieren Sie den entsprechenden Parameter mit ByRef.
Wenn die ordnungsgemäße Codeausführung von der Prozedur abhängt, die das zugrunde liegende Element im Aufrufcode ändert, deklarieren Sie den Parameter mit ByRef. Wenn er als Wert übergeben wird oder wenn der Aufrufcode den ByRef-Übergabemechanismus überschreibt, indem das Argument in Klammern angegeben wird, kann der Prozeduraufruf zu unerwarteten Ergebnissen führen.
Siehe auch
Aufgaben
Gewusst wie: Übergeben von Argumenten an eine Prozedur
Gewusst wie: Ändern des Werts eines Prozedurarguments
Gewusst wie: Schützen eines Prozedurarguments gegen Wertänderungen
Gewusst wie: Erzwingen, dass ein Argument als Wert übergeben wird
Konzepte
Parameter und Argumente von Prozeduren