RTTI-Direktive (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

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.

Siehe auch