Variablen und Objekte

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Version vom 17. Juni 2013, 15:43 Uhr von Manfred (Diskussion | Beiträge) (→‎Existenz und Variablen)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Existenz und Variablen

Von Clipper her war man es gewöhnt, dass die Existenz eines Wertes oder eines Objektes von der Variablen abhängig war, in welcher der Wert oder das Objekt definiert sind. Unter [[Xbase++]9 hat sich das insofern geändert, dass Objekte erst einmal in einem Kontext existieren und nicht in Abhängigkeit von einer Variablen.

Zu diesen Objekten, die in einem Kontext existieren, gehören alle Xbase-Parts, aber auch andere Objekte wie Thread().

Im Zusammenhang mit diesen Objekten dient eine Variable nur als Platzhalter, bis das Objekt erzeugt ist, danach kann die Variable "recyclet" oder anderweitig verwendet werden:

oDlg := XbpDialog():new(oDesktop, oDesktop, aPos, aSize)
...
oXbp := XbpSLE():new(oDlg:drawingArea, oDlg:drawingArea, aPos, aSize)
oXbp := tabStop := .T.
oXbp:create()
...
oXbp := XbpSpinbutton():new(oDlg:drawingArea, oDlg:drawingArea, aPos, aSize)
oXbp := tabStop := .T.
oXbp:create()

Es können weitere Xbase-Parts erstellt werden, deren Referenz in oXbp hinterlegt wird, solange das jeweilige Xbase-Part erzeugt und konfiguriert wird. Mit der Methode :create() wird das Objekt "funktionsfähig" gemacht und existiert nun im folgendem Kontext:

AppDesktop()
+--> oDlg
     +--> oDlg:drawingArea
          +--> (XbpSLE)

Normalerweise "denken" wir in dieser Art:

xValue := Date()
xValue := 23

Mit der zweiten Anweisung wird der Inhalt von xValue überschrieben, und wir haben keine Möglichkeit mehr, auf den "alten" Inhalt (den Rückgabewert von Date()) zuzugreifen, da der Inhalt immer nur im Kontext mit der Variablen existiert und bei Zuweisung eines neuen Wertes "verloren geht".

Ein Objekt, das in einem anderen Kontext besteht, kann auch über diesen Kontext abgerufen werden. In dem obigen Beispiel also über die :childList() Methode (eventuell auch rekursiv), ausgehend von oDlg.