Zum Inhalt springen

wann ByRef oder ByVal in Function


jougli

Empfohlene Beiträge

hallo jougli,

byref = by reference, als referenz übergeben

byval = by value, als wert übergeben

mit byref ist es möglich, den eingangsparameter innerhalb der aufgerufenen funktion zu verändern.

das nimmt man, wenn man den (geänderten) wert eines parameters ausserhalb der aufgerufenen funktion weiterverwenden möchte.

mit byval kann nur der inhalt eines parameters ausgelesen werden und nicht verändert werden.

praktisches bsp:

du bringst dein auto in die werkstatt, um dieses dort reparieren zu lassen. hier nimmst du byref, da das auto in der werkstatt verändert werden soll (reparatur).

mit byval würdest du nur eine kopie des objektes auto in der werkstatt abgeben und dein original ist nach dem werkstattbesuch immer noch dasselbe wie vorher.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi!

Die Dinge sind unserer Erkenntnis nach manchmal nicht so einfach wie sie scheinen... Hier ein paar Statements eines unserer Entwickler zu dem Thema.

MfG

Christian

----schnipp schnapp----schnipp schnapp----schnipp schnapp--

Klammer oder nicht Klammer, das ist die Frage!

Wahrscheinlich ist den meisten VB-Autodidakten schon die merkwürdige Syntax von VB bezüglich Klammerung von Funktionsparametern aufgefallen: Gibt es nur einen Parameter, darf man ihn klammern, bei zweien aber nicht, es sei denn, man schreibt Call davor usw. usf.

Die Erklärung dafür ist folgende:

Bei Aufrufen ohne Call bedeutet die Klammerung eines Parameters, dass er als Konstante übergeben wird. Auch wenn der Parameter als ByRef definiert ist, kann er dann nicht verändert werden.

Beispiel:

Private Sub Hugo (ByRef i as int)

i = 3

End Sub

...

Dim x as Integer

x = 2

Hugo (x)

' hier ist x immer noch 2

Ohne Klammern beim Aufruf von Hugo wäre x jetzt 3.

Deshalb ist es auch nicht erlaubt, zwei Parameter zu klammern.

Beispiel

Private Sub Hugo (ByRef i as int, j as int)

i = 3

End Sub

...

Dim x as Integer

Dim y as Integer

x = 2

y = 3

Hugo (x,y) ' ! Fehler, es können nicht zwei Parameter zur Konstante werden

Hugo x, y ' Übergabe ByRef (wenn Parameter in Routine so definiert sind)

Hugo (x),(y) ' Erlaubt, Übergabe beider Parameter als Konstante

Anders ist es, wenn der Funktionsaufruf mit Call erfolgt. Hier ist immer eine Klammerung der Parameterliste notwendig. Man darf aber zusätzlich einzelne Parameter klammern, wenn man sie als Konstanten übergeben will.

Beispiel:

Private Sub Hugo (ByRef i as int, j as int)

i = 3

End Sub

...

Dim x as Integer

Dim y as Integer

x = 2

y = 3

Call Hugo (x,y) ' Übergabe ByRef (wenn Parameter in Routine so definiert sind)

Call Hugo ((x),(y)) ' Erlaubt, Übergabe beider Parameter als Konstante

Bischen pervers ist das Ganze natürlich, weil man einfach das ByRef-Verhalten ausschalten kann. Wichtig ist nur, dass man auch weiss, wenn man das macht, und die Klammern nicht nur nach Lust und Laune oder aus ästhetischen Gründen setzt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Christian Leverenz,

und wie ist es, wenn ich eine Funktion aus einem ActiveX-Objekt (COM) aufrufe? Dann wird der Patameter doch immer in Klammern übergeben? Den wenn ich aus ASP auf diese Klasse zugreife, erzeuge ich erst ein Objekt und dann rufe ich die Funktion auf. (Aber ohne Call).

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...