RTTI-Direktive (Delphi)
Nach oben zu Liste der Delphi-Compiler-Direktiven - Index
Typ |
Ausdruck |
Syntax |
{$RTTI INHERIT|EXPLICIT [Sichtbarkeitsklausel]} |
Bereich |
Lokal |
Syntax
Die allgemeine Syntax der $RTTI-Direktive kann in drei Teile gegliedert werden. Die Grundform von $RTTI lautet folgendermaßen:
{$RTTI INHERIT|EXPLICIT [Sichtbarkeitsklausel]}
Sichtbarkeitsklausel:
METHODS|PROPERTIES|FIELDS (Sichtbarkeitsausdruck)
Sichtbarkeitsausdruck:
[vcPrivate],[vcProtected], [vcPublic], [vcPublished];
Beschreibung
Die Direktive $RTTI steuert die Anzahl der erweiterten RTTI-Informationen (Run Time Type Information), die für eine Klasse oder einen Record-Typ ausgegeben werden. Die Grundidee dabei ist, dem Entwickler die Möglichkeit zu geben, erweiterte RTTI-Informationen für bestimmte Klassen- oder Record-Member selektiv zu aktivieren oder zu deaktivieren.
Der RTTI-Modus INHERIT ermöglicht, dass Klassen die festgelegten RTTI-Optionen von der Basisklasse erben. Beispiel:
{$RTTI INHERIT} TDerivative = class(TBase) ... end;
Dieser Code stellt sicher, dass alle RTTI-Optionen für TDerivative von der Basisklasse TBase geerbt sind. Damit nur bestimmte Informationen vererbt werden, können Sie eine komplexere Direktive schreiben:
{$RTTI INHERIT METHODS([vcPublic, vcPublished]) PROPERTIES([vcPublic, vcPublished])} TDerivative = class(TBase) ... end;
Dieser Code vererbt RTTI-Optionen nur für public- und published-Methoden und -Eigenschaften. INHERIT kann nicht für Record-Typen verwendet werden, weil Records nicht abgeleitet werden können und daher keine Vorfahren haben.
Mit dem Modus EXPLICIT können Sie geerbte RTTI-Optionen explizit überschreiben. EXPLICIT hebt alle geerbten Optionen auf und legt neue fest:
{$RTTI EXPLICIT METHODS([vcPublished]) PROPERTIES([vcPublished])} TDerivative = class(TBase) ... end;
Das obige Beispiel deaktiviert alle geerbten RTTI-Optionen und definiert neue, wobei nur published-Methoden und -Eigenschaften erweiterte RTTI-Informationen haben.
Um alle erweiterten RTTI-Informationen für eine gegebene Klasse oder einen Record zu deaktivieren, können Sie die folgende RTTI-Direktive verwenden:
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
Damit werden alle geerbten RTTI-Optionen deaktiviert und die neuen so gesetzt, dass keine erweiterten RTTI-Informationen ausgegeben werden.