jougli Geschrieben 8. August 2001 Geschrieben 8. August 2001 Hi VB 6'ler, hab da ne Frage. Wann verwende ich ByRef oder ByVal in einer Function und welche Vorteile habe ich davon? Bis dann Zitieren
hades Geschrieben 8. August 2001 Geschrieben 8. August 2001 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. Zitieren
jougli Geschrieben 8. August 2001 Autor Geschrieben 8. August 2001 Super Danke, hat mir sehr geholfen. Zitieren
Christian Leverenz Geschrieben 16. August 2001 Geschrieben 16. August 2001 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. Zitieren
jougli Geschrieben 16. August 2001 Autor Geschrieben 16. August 2001 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 Zitieren
Empfohlene Beiträge
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.