Erstellung eines Objektverweises
Statt der Kopie eines Objekts können Sie auch einen Verweis auf das Objekt erstellen. Ein Verweis benötigt weniger Arbeitsspeicher als ein weiteres Objekt, kann zwischen Prozeduren einfach übergeben werden und kann beim Schreiben von generischem Code hilfreich sein.
Rückgabe eines Verweises auf ein Objekt
Manchmal möchten Sie ein Objekt möglicherweise unter Verwendung eines oder mehrerer Verweise bearbeiten. Im folgenden Programm wird beispielsweise eine Klasse definiert, ein auf dieser Klasse basierendes Objekt erstellt und ein Verweis auf das Objekt zurückgegeben:
*--NEWINV.PRG
*--Returns a reference to a new invoice form.
frmInv = CREATEOBJECT("InvoiceForm")
RETURN frmInv
DEFINE CLASS InvoiceForm AS FORM
ADD OBJECT txtCompany AS TEXTBOX
* code to set properties, add other objects, and so on
ENDDEFINE
Das folgende Programm erstellt einen Verweis auf das in Newinv.prg erstellte Objekt. Die Verweisvariable kann genauso verwendet werden wie die Objektvariable:
frmInvoice = NewInv() && store the object reference to a variable
frmInvoice.SHOW
Das folgende Beispiel zeigt, dass Sie auch einen Verweis auf ein Objekt eines Formulars erstellen können:
txtCustName = frmInvoice.txtCompany
txtCustName.Value = "Fox User"
Tipp Nachdem Sie ein Objekt erstellt haben, können Sie den Befehl DISPLAY OBJECTS verwenden, um die Klassenhierarchie des Objekts, die Eigenschaftseinstellungen, darin enthaltene Objekte sowie verfügbare Methoden und Ereignisse anzuzeigen. Sie können ein Array mit Hilfe der AMEMBERS( )-Funktion mit den Eigenschaften (nicht den Eigenschaftseinstellungen) eines Objekts, den Ereignissen, Methoden und darin enthaltenen Objekten füllen.
Entfernen von Objekten und Verweisen aus dem Arbeitsspeicher
Wenn ein Verweis auf ein Objekt besteht, wird das Objekt bei seiner Freigabe nicht automatisch aus dem Arbeitsspeicher entfernt. Der folgende Befehl gibt z. B. das Originalobjekt frmInvoice
frei:
RELEASE frmInvoice
Weil jedoch noch ein Verweis auf ein zu frmInvoice
gehörendes Objekt vorhanden ist, wird das Objekt erst aus dem Arbeitsspeicher entfernt, wenn txtCustName
über folgenden Befehl freigegeben wird:
RELEASE txtCustName
Überprüfen der Existenz eines Objekts
Mit Hilfe der Funktionen TYPE( ), ISNULL( ) und VARTYPE( ) können Sie ermitteln, ob ein Objekt vorhanden ist. Die folgenden Codezeilen überprüfen beispielsweise, ob ein Objekt namens oConnection
existiert:
IF TYPE("oConnection") = "O" AND NOT ISNULL(oConnection)
* Object exists
ELSE
* Object does not exist
ENDIF
Anmerkung ISNULL( ) ist erforderlich, weil .NULL. zwar in der Formularobjektvariablen gespeichert wird, wenn ein Benutzer ein Formular schließt, der Variablentyp jedoch "O" bleibt.
Siehe auch
Programmgesteuertes Schreiben von Klassendefinitionen | Definition eines Datenraster-Steuerelements | Arrays von Elementen und Objekten | DISPLAY OBJECTS | AMEMBERS( ) | Objektorientierte Programmierung