Laufzeittypinformationen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Unterstützung für Delphi-Datentypen und Sprachkonzepte


Einige Sprachkonstrukte von Object Pascal arbeiten mit RTTI. Für manche davon gibt es C++-Entsprechungen. Diese sind in der folgenden Tabelle aufgeführt:


Beispiele von RTTI-Zuordnungen zwischen Object Pascal und C++

Object Pascal RTTI C++ RTTI
if Sender is TButton...(* ... *)
if ((dynamic_cast<TButton*>(Sender)) != NULL)
// dynamic_cast gibt bei einem Fehler NULL zurück
b := Sender as TButton; 
(* löst bei einem Fehler eine Exception aus *)
TButton& ref_b = dynamic_cast<TButton&>(*Sender);
// löst bei einem Fehler eine Exception aus
ShowMessage(Sender.ClassName);
ShowMessage(typeid(*Sender).name());


In der obigen Tabelle ist ClassName eine TObject-Methode, die einen String mit dem Namen und dem tatsächlichen Typ des Objekts zurückgibt, unabhängig vom Typ der deklarierten Variable. Andere in TObject eingeführte RTTI-Methoden haben keine C++-Gegenstücke. Diese Methoden sind alle als public deklariert und im Folgenden aufgeführt:

  • ClassInfo gibt einen Zeiger auf die Tabelle mit den Laufzeittypinformationen (RTTI) des Objekttyps zurück.
  • ClassNameIs legt fest, ob ein Objekt einen bestimmten Typ hat.
  • ClassParent gibt den Typ des direkten Vorfahren der Klasse zurück. Bei TObject gibt ClassParent nil zurück, weil TObject keinen Vorfahren hat. Wird von den Operatoren is und as und von der Methode InheritsFrom verwendet.
  • ClassType legt dynamisch den tatsächlichen Typ des Objekts fest. Wird intern von den Object Pascal-Operatoren is und as verwendet.
  • FieldAddress verwendet RTTI zum Ermitteln der Adresse eines published-Feldes. Wird intern vom Streaming-System verwendet.
  • InheritsFrom legt die Beziehung zweier Objekte fest. Wird intern von den Object Pascal-Operatoren is und as verwendet.
  • MethodAddress verwendet RTTI zum Suchen der Adresse einer Methode. Wird intern vom Streaming-System verwendet.

Einige Methoden von TObject sind hauptsächlich für die interne Verwendung durch den Compiler oder das Streaming-System gedacht.

Siehe auch