Abstract(): Unterschied zwischen den Versionen
Georg (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Georg (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 14: | Zeile 14: | ||
== Methoden == | == Methoden == | ||
classDescribe(<nInfo>) => aReturn | '''classDescribe(<nInfo>) => aReturn''' | ||
classDescribe liefert ein Array zurück, das entsprechend der Vorgabe durch nInfo die jeweilige Klasse beschreibt. | classDescribe liefert ein Array zurück, das entsprechend der Vorgabe durch nInfo die jeweilige Klasse beschreibt. | ||
Zeile 82: | Zeile 82: | ||
ClassName() => cClassName | '''ClassName() => cClassName''' | ||
Die Methode :ClassName() dient dazu, den Namen der Klasse zu ermitteln, von der ein Objekt abgeleitet ist. Da alle Objekte in Xbase++ auch von Abstract() abgeleitet sind, kann über diese Methode der Klassenname ermittelt werden. | Die Methode :ClassName() dient dazu, den Namen der Klasse zu ermitteln, von der ein Objekt abgeleitet ist. Da alle Objekte in Xbase++ auch von Abstract() abgeleitet sind, kann über diese Methode der Klassenname ermittelt werden. | ||
Zeile 89: | Zeile 89: | ||
ClassObject() => oClassObject | '''ClassObject() => oClassObject''' | ||
Die Methode :ClassObject() dient dazu, das Klassenobjekt eines Objektes zu ermitteln. Das Klassenobjekt ist das Objekt, das durch den Aufruf von :new() ein neues Objekt der Klasse erstellt: | Die Methode :ClassObject() dient dazu, das Klassenobjekt eines Objektes zu ermitteln. Das Klassenobjekt ist das Objekt, das durch den Aufruf von :new() ein neues Objekt der Klasse erstellt: |
Aktuelle Version vom 26. August 2013, 14:29 Uhr
Allgemeines
Abstract() ist wohl als Mutter aller Klassen zu betrachten. In dieser Klasse sind Meta-Funktionen implementiert, die von jeder Klasse geerbt werden. Da es sich bei Abstract() um eine abstrakte Klasse handelt, kann sie nicht für Ableitungen verwendet werden. Dies macht auf der anderen Seite auch keinen Sinn, da jede Klasse automatisch Methoden und Instanzvariablen von Abstract() erbt.
Syntax
keine Syntax, da Abstract() nicht zur Erzeugung eines Objektes verwendet werden kann.
Methoden
classDescribe(<nInfo>) => aReturn
classDescribe liefert ein Array zurück, das entsprechend der Vorgabe durch nInfo die jeweilige Klasse beschreibt.
nInfo | Rückgabewert | Hinweis | Aufbau der Antwort | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CLASS_DESCR_ALL | Liefert alle verfügbaren Informationen in einem Array | Unterlassungswert |
| ||||||||||||
CLASS_DESCR_CLASSNAME | Klassenname als String | ||||||||||||||
CLASS_DESCR_SUPERCLASSES | ein-dimensionales Array mit den Klassen-Objekten der Superklassen | ||||||||||||||
CLASS_DESCR_MEMBERS | dreispaltiges Array mit Informationen zu den Member-Variablen |
| |||||||||||||
CLASS_DESCR_METHODS | fünfspaltiges Array mit Informationen zu den Methoden |
| |||||||||||||
CLASS_DESCR_SUPERDETAILS | dreispaltiges Array mit Informationen zu den Superklassen |
|
ClassName() => cClassName
Die Methode :ClassName() dient dazu, den Namen der Klasse zu ermitteln, von der ein Objekt abgeleitet ist. Da alle Objekte in Xbase++ auch von Abstract() abgeleitet sind, kann über diese Methode der Klassenname ermittelt werden.
Wichtig an dieser Stelle ist der Hinweis, dass der Klassenname so zurückgegeben wird, wie er in der Quelle definiert wurde, d.h. Gross- und Kleinschreibung werden 1:1 übernommen. Gemeinsam mit den figurativen Konstanten, die über #DEFINE definiert werden, sind auch Klassennamen "case sensitive".
ClassObject() => oClassObject
Die Methode :ClassObject() dient dazu, das Klassenobjekt eines Objektes zu ermitteln. Das Klassenobjekt ist das Objekt, das durch den Aufruf von :new() ein neues Objekt der Klasse erstellt:
oClass := XbpPushButton():new():create() oMaster := oClass:ClassObject() oClass2 := oMaster:new()
Dieser Code erzeugt ein neues XbpPushButton()-Objekt und speichert die Referenz in oClass2.
Ein anderer Einsatzzweck ist der Vergleich, ob zwei Objekte von der gleichen Klasse abgeleitet sind:
FUNCTION IsSameClass(oObj1, oObj2) Local lEqual lEqual := oObj1:ClassObject() == oObj2:ClassObject() RETURN (lEqual)
Instanzvariablen
(es existieren keine Instanzvariablen)
Callback Slots
(es existieren keine Callback Slots)
Querverweise
benötigte DLLs bzw. Include-Dateien
Class.CH
XppUI1.DLL
Anwendungsbeispiel
(Artikel in Arbeit)