Comment planifier une belle soirée cinéma en plein air – LifeSavvy
21 août 2020
Le look «classique» de Facebook disparaît en septembre – Review Geek
21 août 2020

C #

En C #, les attributs sont des balises de métadonnées affectées au code, y compris les classes, les types, les méthodes et les champs. En utilisant la réflexion, vous pouvez examiner les balises pour modifier les comportements de votre programme. Nous montrerons comment les utiliser et comment rédiger les vôtres.

Quels sont les attributs?

En termes simples, les attributs sont des balises de métadonnées qui contiennent des informations. La syntaxe pour eux est le nom du type entre crochets au-dessus du code en cours de balisage, comme ceci:

(Attribut)
Commande void ()
{

Ils peuvent être attachés à pratiquement n'importe quoi – classes, méthodes, champs, structures, types, etc. Ils peuvent même recevoir des paramètres pour fournir des entrées accessibles, bien qu'ils soient limités aux types de base. Vous pouvez définir des paramètres en appelant l'attribut comme une méthode:

(Attribut ("nom", Test = faux, Nombre = 42))

Un cas d'utilisation courant est le marquage des champs pour la sérialisation. C # a un intégré (Sérialisable) tag, qui prend en charge la sérialisation d'une classe en octets, et de nombreuses bibliothèques tierces implémenteront leurs propres balises. Par exemple, le pilote C # pour MongoDB comprend de nombreuses balises pour la sérialisation vers Bson, ainsi qu'une balise spéciale qui interprétera une chaîne comme l'ID de document.

Balise C # intégrée (sérialisable), qui prend en charge la sérialisation d'une classe en octets.

Un autre cas d'utilisation courant est celui des méthodes de balisage gérées par un gestionnaire de commandes de niveau supérieur. Par exemple, un Discord Bot, enregistre une liste de commandes qui sont gérées chaque fois que quelqu'un envoie un message. Plutôt que d'ajouter manuellement chaque commande au gestionnaire de commandes à chaque fois que vous en écrivez une nouvelle, vous pouvez à la place marquer la méthode avec (Command ("commandname")), et utilisez la solution générique qui les ajoutera automatiquement lors de l'exécution.

Méthodes de balisage gérées par un gestionnaire de commandes de niveau supérieur.

Tu peux lire Documentation de Microsoft pour en savoir plus, mais ils sont assez simples.

Comment créer vos propres attributs

Bien sûr, vous pouvez facilement créer vos propres attributs personnalisés à appliquer à vos classes. Tout ce que vous avez à faire est de créer une classe qui s'étend de System.Attribute. Vous pouvez également ajouter un attribut sur cette classe spécifiant comment il doit être utilisé; par exemple, ne s'appliquant qu'aux classes ou aux structures.

Ensuite, vous pouvez spécifier des champs et un constructeur qui prendra les paramètres d'entrée et remplira les champs. Lorsque vous utilisez cet attribut, c'est comme appeler nouvel attribut (paramètres), sauf sans le Nouveau mot-clé.

(System.AttributeUsage (System.AttributeTargets.Class | System.AttributeTargets.Struct))  
Publique classe AuteurAttribut : Système.Attribut  
{  
    privé chaîne Nom;  
    Publique double version;  
  
    Publique AuteurAttribut(chaîne Nom)  
    {  
        ce.name = nom;
        version = 1.0;
    }
}

Vous êtes ensuite libre de les utiliser pour baliser votre code, à condition que l’attribut soit référencé dans le code en cours de balisage.

Utilisation de contructor pour baliser votre code.

Pour accéder aux attributs par programmation, vous devez utiliser la réflexion. La réflexion n'est pas excellente pour les performances, mais pour les cas d'utilisation des attributs, cela n'a généralement pas d'importance. Vous pouvez utiliser Attribute.GetCustomAttributes retourner un Attribut(), en passant le type de la classe:

System.Attribute.GetCustomAttributes (typeof (className));

Si vous souhaitez accéder à toutes les instances d'attributs de votre assemblage, vous pouvez utiliser Assembly.GetExecutingAssembly (). GetTypes () pour récupérer une liste de types en cours d'exécution, puis vérifier tous les attributs personnalisés de ce type pour voir s'il contient le paramètre de recherche, en filtrant éventuellement cette liste en fonction du type de classe auquel l'attribut est attaché.

var plugins = Assembly.GetExecutingAssembly (). GetTypes ()
    .Where (t => t.IsClass
            && t.BaseType == typeof (BasePlugin)
            && Attribute.GetCustomAttributes (t) .Any ((atr) => atr.GetType () == typeof (MyCustomAttribute)))
    .Lister();

Utilisez Assembly.GetExecutingAssembly (). GetTypes () pour récupérer la liste des types en cours d'exécution, puis vérifiez tous les attributs personnalisés pour voir s'il contient le paramètre de recherche.

Pour accéder aux paramètres d'attribut, il vous suffit d'y accéder directement depuis la classe Attribute, comme toute autre propriété publique.

//]]>