Afficher : Delphi C++
Préférences d'affichage

Déclaration des attributs personnalisés

De RAD Studio XE2

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.

Voir aussi

Versions précédentes
Autres langues