Abstract()

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Zur Navigation springen Zur Suche springen

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
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
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
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
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)




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)