Directive RTTI (Delphi)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Liste des directives de compilation Delphi - Index

Type

Expression

Syntaxe

{$RTTI INHERIT|EXPLICIT [clause de visibilité]}

Portée

Locale

Syntaxe

La syntaxe générale de la directive $RTTI peut être divisée en trois parties. Voici la forme de base de $RTTI :

{$RTTI INHERIT|EXPLICIT [visibility-clause]}

clause-visibilité :

METHODS|PROPERTIES|FIELDS (visibility-expression)

Expression-visibilité :

 [vcPrivate],[vcProtected], [vcPublic], [vcPublished];


Description

La directive $RTTI est utilisée pour contrôler la quantité d'informations RTTI (Run Time Type Information, Informations de type à l'exécution) étendues qui ont été émises pour un type enregistrement ou classe. L'idée de base est de donner au développeur la puissance d'activer ou de désactiver de façon sélective des informations RTTI étendues pour certains membres d'enregistrement ou de classe.

Le mode RTTI INHERIT permet aux classes d'hériter des options RTTI spécifiées de la classe de base. Par exemple :

{$RTTI INHERIT}
TDerivative = class(TBase)
...
end;

garantit que toutes les options RTTI de TDerivative sont héritées de la classe de base TBase. Pour n'hériter que de certaines informations, vous pouvez écrire une directive plus complexe :

{$RTTI INHERIT METHODS([vcPublic, vcPublished]) PROPERTIES([vcPublic, vcPublished])}
TDerivative = class(TBase)
...
end;

qui hérite des options RTTI seulement pour les méthodes et les propriétés publiques et publiées. INHERIT ne peut pas être utilisé pour les types enregistrement, car les enregistrements ne peuvent pas être dérivés et n'ont pas d'ancêtres.

Pour redéfinir de manière explicite les options RTTI héritées, utilisez le mode EXPLICIT. Lorsqu'il est utilisé, EXPLICIT inhibe toutes les options héritées et en définit de nouvelles :

{$RTTI EXPLICIT METHODS([vcPublished]) PROPERTIES([vcPublished])}
TDerivative = class(TBase)
...
end;

L'exemple précédent désactive toutes les options RTTI héritées et en définit de nouvelles, dans lesquelles seulement les méthodes et les propriétés publiées ont des informations RTTI étendues.

Pour désactiver toutes les informations RTTI étendues pour une classe ou un enregistrement donné, vous pouvez écrire une directive RTTI comme celle-ci :

{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}

qui désactive toutes les options RTTI héritées et définit les nouvelles options qui n'émettent pas d'informations RTTI étendues.

Voir aussi