Attributs (instructions de conception .NET Framework)
Remarque
Ce contenu est réimprimé avec l’autorisation de Pearson Education, Inc. à partir des Instructions de conception d’une infrastructure : conventions, idiomes et modèles des bibliothèques réutilisables .NET, 2ème édition. Cette édition a été publiée en 2008, et le livre a été entièrement révisé dans la troisième édition. Certaines informations de cette page peuvent être obsolètes.
System.Attribute est une classe de base utilisée pour définir des attributs personnalisés.
Les attributs sont des annotations qui peuvent être ajoutées à des éléments de programmation, comme des assemblys, des types, des membres et des paramètres. Ils sont stockés dans les métadonnées de l’assembly et sont accessibles au moment de l’exécution à l’aide des API de réflexion. Par exemple, le framework définit ObsoleteAttribute, qui peut être appliqué à un type ou à un membre pour indiquer que le type ou le membre a été déprécié.
Les attributs peuvent avoir une ou plusieurs propriétés qui contiennent des données supplémentaires liées à l’attribut. Par exemple, ObsoleteAttribute
peut contenir des informations supplémentaires sur la version dans laquelle un type ou un membre a été déprécié et la description des nouvelles API remplaçant l’API obsolète.
Certaines propriétés d’un attribut doivent être spécifiées lorsque l’attribut est appliqué. On parle de propriétés requises ou d’arguments requis, car ces éléments sont représentés en tant que paramètres positionnels du constructeur. Par exemple, la propriété ConditionString de ConditionalAttribute est une propriété obligatoire.
Les propriétés qui n’ont pas nécessairement besoin d’être spécifiées lorsque l’attribut est appliqué sont appelées propriétés facultatives (ou arguments facultatifs). Elles sont représentées par des propriétés settables. Les compilateurs fournissent une syntaxe spéciale pour définir ces propriétés lorsqu’un attribut est appliqué. Par exemple, la propriété AttributeUsageAttribute.Inherited représente un argument facultatif.
✔️ NOMMEZ les classes d’attributs personnalisés avec le suffixe « Attribute ».
✔️ APPLIQUEZ AttributeUsageAttribute aux attributs personnalisés.
✔️ FOURNISSEZ des propriétés settables pour les arguments facultatifs.
✔️ FOURNISSEZ des propriétés get-only pour les arguments requis.
✔️ FOURNISSEZ des paramètres de constructeur pour initialiser les propriétés correspondant aux arguments requis. Chaque paramètre doit avoir le même nom que la propriété correspondante (bien qu’avec une casse différente).
❌ ÉVITEZ de fournir des paramètres de constructeur pour initialiser les propriétés correspondant aux arguments facultatifs.
En d’autres termes, ne disposez pas de propriétés qui peuvent être définies à la fois avec un constructeur et un setter. Cette directive rend très explicites les arguments facultatifs et les arguments requis, et évite d’avoir deux façons de faire la même chose.
❌ ÉVITEZ de surcharger les constructeurs à attributs personnalisés.
Le fait d’avoir un seul constructeur indique clairement à l’utilisateur quels arguments sont requis et ceux qui sont facultatifs.
✔️ SCELLEZ, si possible, les classes à attributs personnalisés. Cela accélère la recherche d’attributs.
Portions © 2005, 2009 Microsoft Corporation. Tous droits réservés.
Réimprimé avec l’autorisation de Pearson Education, Inc. et extrait de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition par Krzysztof Cwalina et Brad Abrams, publié le 22 octobre 2008 par Addison-Wesley Professional dans le cadre de la série sur le développement Microsoft Windows.