Ü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

Prozeduren in Visual Basic

Parameter und Argumente von Prozeduren

Argumentübergabe nach Position und Namen

Wert- und Verweistypen