Informations de type à l'exécution

De RAD Studio
Aller à : navigation, rechercher

Remonter à Gestion des types de données et des concepts du langage Delphi


Le Pascal Objet propose des constructions gérant le RTTI. Certaines ont des équivalents en C++. Ces types sont listés dans le tableau suivant :


Exemples de mappages RTTI entre Pascal Objet et C++

Object Pascal RTTI C++ RTTI
if Sender is TButton (* ... *)
if ((dynamic_cast<TButton*>(Sender)) != NULL)
// dynamic_cast renvoie NULL en cas d'échec
b := Sender as TButton; 
(* déclenche une exception en cas d’échec  *)
TButton& ref_b = dynamic_cast<TButton&>(*Sender);
// déclenche une exception en cas d’échec.
ShowMessage(Sender.ClassName);
ShowMessage(typeid(*Sender).name());


Dans le tableau précédent, ClassName est une méthode TObject qui renvoie une chaîne contenant le nom du type réel de l'objet sans tenir compte du type de la variable déclarée. D'autres méthodes RTTI introduites dans TObject n'ont pas d'équivalent C++. Ce sont les méthodes publiques suivantes :

  • ClassInfo renvoie un pointeur sur la table des informations de type à l’exécution (RTTI) du type d’objet.
  • ClassNameIs détermine si un objet est d’un type donné.
  • ClassParent renvoie le type de l’ancêtre immédiat de la classe. Pour TObject, ClassParent renvoie nil car TObject n’a pas de parent. Elle est utilisée par les opérateurs is et as, et par la méthode InheritsFrom.
  • ClassType détermine dynamiquement le type réel d’un objet. Elle est utilisée de manière interne par les opérateurs is et as de Pascal Objet.
  • FieldAddress utilise le RTTI pour obtenir l’adresse d’un champ publié. Elle est utilisée de manière interne par le système de flux.
  • InheritsFrom détermine la relation entre deux objets. Elle est utilisée de manière interne par les opérateurs is et as de Pascal Objet.
  • MethodAddress utilise le RTTI pour trouver l’adresse d’une méthode. Elle est utilisée de manière interne par le système de flux.

Certaines de ces méthodes de TObject sont conçues pour un usage interne par le compilateur ou pour le système de flux.

Voir aussi