Déclaration des attributs personnalisés
Remonter à Attributs - Index
Cette rubrique décrit les méthodes de base utilisées pour créer des attributs personnalisés, les décisions de conception appropriées pour les classes d'attributs et les cas d'utilisation généraux.
Déclaration d'un attribut
Un attribut est un type de classe simple. Pour déclarer votre propre attribut personnalisé, vous devez le dériver d'une classe TCustomAttribute prédéfinie spéciale située dans l'unité System :
type TMyCustomAttribute = class(TCustomAttribute) end;
TMyCustomAttribute peut ensuite être utilisé pour annoter tout type ou tout membre d'un type (tel que classe, enregistrement ou interface) :
type [TMyCustomAttribute] TSpecialInteger = type integer;
ou
type
TSomeClass = class
[TMyCustomAttribute]
procedure Work;
end;
Sachez que la classe d'attribut déclarée ne doit pas être déclarée en tant que classe abstraite et ne doit pas contenir des méthodes abstraites. Bien que le compilateur vous permet d'utiliser ces attributs pour l'annotation, le binaire construit ne les incluera pas dans les informations RTTI émises.
Constructeurs dans les attributs
Normalement, un attribut est conçu pour transporter des informations supplémentaires qui peuvent être interrogées à l'exécution. Pour autoriser la spécification d'informations personnalisées pour la classe d'attributs, vous devez déclarer des constructeurs :
type
TAttrWithConstructor = class(TCustomAttribute)
public
constructor Create(const ASomeText: String);
end;
qui peuvent ensuite être utilisés comme suit :
type
[TAttrWithConstructor('Added text value!')]
TRecord = record
FField: Integer;
end;
La résolution de la méthode fonctionne aussi pour les attributs, ce qui signifie que vous pouvez définir des constructeurs surchargés dans l'attribut personnalisé. Déclarez seulement des constructeurs qui acceptent des valeurs constantes, et pas des valeurs out ou var. Cela se produit hors d'une restriction de base dans la façon dont les attributs fonctionnent et est traité plus en détail dans la rubrique Annotation des types et des membres de types.