Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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.

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...