Abstract(): Unterschied zwischen den Versionen
Georg (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „ == Allgemeines == Abstract() ist wohl als Mutter aller Klassen zu betrachten. In dieser Klasse sind Meta-Funktionen implementiert, die von jeder Klasse geerb…“) |
Georg (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
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. | ||
{| class="wikitable" | |||
|- | |||
! nInfo !! Rückgabewert !! Hinweis !! Aufbau der Antwort | |||
|- | |||
| CLASS_DESCR_ALL || Liefert alle verfügbaren Informationen in einem Array || Unterlassungswert || | |||
{| border="1" | |||
|- | |||
! Indikator !! Inhalt | |||
|- | |||
| CLASS_DESCR_CLASSNAME || Name der Klasse | |||
|- | |||
| CLASS_DESCR_SUPERCLASSES || Array mit den Klassen-Objekten der Superklassen | |||
|- | |||
| CLASS_DESCR_MEMBERS || Array mit den Member-Variablen | |||
|- | |||
| CLASS_DESCR_METHODS || Array mit den Methoden | |||
|} | |||
|- | |||
| 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 || || | |||
{| border="1" | |||
|- | |||
! Indikator !! Inhalt | |||
|- | |||
| CLASS_MEMBER_NAME || Name der Variablen als Character-String | |||
|- | |||
| CLASS_MEMBER_ATTR || Attribute der Variablen als numerischer Wert | |||
|- | |||
| CLASS_MEMBER_TYPE || (reserviert) | |||
|} | |||
|- | |||
| CLASS_DESCR_METHODS || fünfspaltiges Array mit Informationen zu den Methoden || || | |||
{| border="1" | |||
|- | |||
! Indikator !! Inhalt | |||
|- | |||
| CLASS_METHOD_NAME || Name der Methode als Character-String | |||
|- | |||
| CLASS_METHOD_ATTR || Attribute der Methode als numerischer Wert | |||
|- | |||
| CLASS_METHOD_BLOCK || Code-Block der Methode, falls die Klasse dynamisch via ClassCreate() erzeugt wurde | |||
|- | |||
| CLASS_METHOD_VARNAME || Name der redirected Variablen, wenn es eine ACCESS/ASSIGN Methode ist | |||
|- | |||
| CLASS_METHOD_TYPE || (reserviert) | |||
|} | |||
|- | |||
| CLASS_DESCR_SUPERDETAILS || dreispaltiges Array mit Informationen zu den Superklassen || || | |||
{| border="1" | |||
|- | |||
! Indikator !! Inhalt | |||
|- | |||
| CLASS_SUPERCLASS_NAME || Name der Superklasse als Character-String | |||
|- | |||
| CLASS_SUPERCLASS_ATTR || Attribute der Superklasse als numerischer Wert | |||
|- | |||
| CLASS_SUPERCLASS_TYPE || (reserviert) | |||
|} | |||
|} | |||
'''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) | |||
Zeile 22: | Zeile 113: | ||
== Instanzvariablen == | == Instanzvariablen == | ||
(es existieren keine Instanzvariablen) | |||
== Callback Slots == | == Callback Slots == | ||
(es existieren keine Callback Slots) | |||
Zeile 33: | Zeile 126: | ||
== benötigte DLLs bzw. Include-Dateien == | == benötigte DLLs bzw. Include-Dateien == | ||
Class.CH | |||
XppUI1.DLL | |||
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)