Share via


Création d'attributs personnalisés (Guide de programmation C#)

Mise à jour : Juillet 2008

Vous pouvez créer vos propres attributs personnalisés en définissant une classe d'attributs, une classe qui dérive directement ou indirectement de Attribute, ce qui accélère et simplifie l'identification des définitions des attributs dans les métadonnées. Supposons que vous souhaitez baliser des classes et des structures à l'aide du nom du programmeur qui a écrit la classe ou la structure. Vous pouvez définir une classe d'attributs personnalisés Author :

[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct)
]
public class Author : System.Attribute
{
    private string name;
    public double version;

    public Author(string name)
    {
        this.name = name;
        version = 1.0;
    }
}

Le nom de la classe est le nom de l'attribut, Author. Étant dérivée de System.Attribute, il s'agit donc d'une classe d'attributs personnalisés. Les paramètres du constructeur sont les paramètres positionnels de l'attribut personnalisé, en l'occurrence name), et les propriétés ou les champs éventuels de type public accessibles en lecture-écriture sont des paramètres nommés, en l'occurrence, version est le seul paramètre nommé. Notez l'utilisation de l'attribut AttributeUsage pour rendre l'attribut Author valide uniquement dans les déclarations de class et de struct.

Vous pouvez utiliser ce nouvel attribut de la manière suivante :

[Author("H. Ackerman", version = 1.1)]
class SampleClass
{
    // H. Ackerman's code goes here...
}

AttributeUsage a un paramètre nommé, AllowMultiple, qui permet de déclarer un attribut personnalisé comme étant à usage unique ou multiple.

[System.AttributeUsage(System.AttributeTargets.Class |
                       System.AttributeTargets.Struct,
                       AllowMultiple = true)  // multiuse attribute
]
public class Author : System.Attribute
[Author("H. Ackerman", version = 1.1)]
[Author("M. Knott", version = 1.2)]
class SampleClass
{
    // H. Ackerman's code goes here...
    // M. Knott's code goes here...
}
Remarque :

Si votre classe d'attributs contient une propriété, cette dernière doit être accessible en lecture/écriture. Les propriétés en écriture seule ne sont pas prises en charge dans les classes d'attributs dans C#.

Voir aussi

Concepts

Guide de programmation C#

Référence

Réflexion (Guide de programmation C#)

Attributs (Guide de programmation C#)

Utilisation d'attributs (Guide de programmation C#)

Levée de l'ambiguïté sur les cibles d'attribut (Guide de programmation C#)

Accès à des attributs à l'aide de la réflexion (Guide de programmation C#)

System.Reflection

Historique des modifications

Date

Historique

Raison

Juillet 2008

Ajout d'une note sur la prise en charge des propriétés.

Résolution des bogues de contenu.