Lade...
 

Inherited

Inherited

Inherited, Inherited(zugriffsAusdruck)

Parameter:  optional ein Zugriffsausdruck

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