Inherited
Inherited, Inherited(zugriffsAusdruck)
Parameter: optional ein Zugriffsausdruck
Stack | Position | Beschreibung |
---|---|---|
Stack(In) | Top | ein Objekt (mit der classID1) |
Top-1 | Bezeichner einer Klasse classID2 | |
Stack(Out) | Top | Abstand in der Klassenhierarchie oder 0 falls keine is-a Beziehung besteht. |
Die Anweisung testet, ob entweder das Objekt vom Stack-Top (wenn kein Parameter angegeben ist) oder das von diesem via Zugriffsausdruck erreichte Objekt von der auf Stack-Top-1 angegeben Klasse abgeleitet ist (classID1 is a classID2). Als Ergebnis wird der Abstand der Klasse des angegebenen Objekts zur angegebenen Klasse geliefert, wobei
- 0 bedeutet, dass die Klasse mit der ClassID1 nicht von der Klasse mit ClassID2 erbt,
- 1 bedeutet, dass ClassID1 gleich ClassID2 ist,
- jeder Wert n > 1 bedeutet, dass die Klasse mit ClassID1 von der Klasse mit ClassID2 erbt und (n-2) weitere Klassen in der Vererbungshierarachie dazwischen stehen.
Falls das Objekt ein Wrapper oder Vergleichbares ist (CX_DESCRIPTIVE_REF, CX_FCONDITION oder abgeleitete) und als Klassenbezeichner kein Typ der Vererbungshierarchie angegeben wird, testet der Befehl Inherited zusätzlich ob das gewrappte Objekt von der angegebenen Klasse erbt.
Code-Beispiel:
Var(value) 5€ -> value CX_VALUE value Inherited // => 1, as CX_VALUE is a CX_VALUE
Var(value) 5€ -> value CX_NUMERIC value Inherited // => 2, as CX_VALUE is directly inherited from CX_NUMERIC
Var(value) 5€ -> value CX_CLASS value Inherited // => 4, as CX_VALUE is inherited from CX_NUMERIC, CX_AMOUNT, CX_CLASS
Var(value) 5€ -> value CX_ACCOUNT value Inherited // => 0, as CX_VALUE is not inherited from CX_ACCOUNT
Parameter: -
Stack | Position | Beschreibung |
---|---|---|
Stack(In) | Top | Bezeichner einer Klasse classID1 |
Top-1 | Bezeichner einer Klasse classID2 | |
Stack(Out) | Top | TRUE oder FALSE |
Die Anweisung testet, ob ein Objekt der Klasse classID1 von der durch classID2 bezeichneten Klasse abgeleitet ist.
Mit anderen Worten: das Ergebnis ist TRUE wenn gilt: "classID2 is a classID1".
Achtung: Die Reihenfolge der Parameter is hier im Vergleich zum Aufruf mit einem Objekt vertauscht.
CX_VALUE obj Inherited ↔ CX_VALUE obj Type Swap Inherited
Hier darf kein Parameter angegeben werden.
Code-Beispiel:
CX_VALUE CX_VALUE Inherited // => 1, as CX_VALUE is a CX_VALUE
CX_VALUE CX_NUMERIC Inherited // => 2, as CX_VALUE is directly inherited from CX_NUMERIC
CX_VALUE CX_CLASS Inherited // => 4, as CX_VALUE is inherited from CX_NUMERIC, CX_AMOUNT, CX_CLASS
CX_VALUE CX_ACCOUNT Inherited // => 0, as CX_VALUE is not inherited from CX_ACCOUNT