Dans la plateforme .NET, et par conséquent en Visual Basic, les attributs ont été introduits comme un puissant outil pour annoter divers éléments de code avec des métadonnées. Cela permet aux programmes et aux outils, à l'exécution et à la compilation, d'obtenir des informations supplémentaires, de configurer le comportement des méthodes, classes et propriétés via des mécanismes de réflexion, de sérialisation, d'automatisation des tests, etc.
Sans attributs, il est nécessaire de coder rigidement la logique supplémentaire pour configurer les méthodes ou classes, et les bibliothèques universelles ne peuvent être extensibles et flexibles sans informations externes sur la classe ou la méthode. Il y a également un problème de transmission des paramètres sans modifier le code lui-même.
Les attributs sont des classes spéciales dérivées de l'Attribute. Ils peuvent être créés et appliqués aux méthodes, classes, propriétés, paramètres ou valeurs de retour. À l'exécution, ces attributs peuvent être découverts via la réflexion et modifier le comportement de la logique correspondante.
Exemple de code de création et d'utilisation d'un attribut personnalisé :
Imports System <AttributeUsage(AttributeTargets.Class Or AttributeTargets.Method, AllowMultiple:=False)> Public Class InfoAttribute Inherits Attribute Public Property Description As String Public Sub New(desc As String) Description = desc End Sub End Class <Info("Méthode de logique d'affaires spéciale.")> Public Sub Calculate() Console.WriteLine("Calcul effectué.") End Sub ' Lecture de l'attribut via la réflexion Dim method = GetType(Module1).GetMethod("Calculate") Dim attr = CType(Attribute.GetCustomAttribute(method, GetType(InfoAttribute)), InfoAttribute) If attr IsNot Nothing Then Console.WriteLine(attr.Description)
Caractéristiques clés :
AttributeTargets.Class, Method, Property, etc.)Les attributs peuvent-ils modifier directement le comportement d'une méthode ou d'une classe sans utiliser la réflexion ?
Non, les attributs eux-mêmes contiennent seulement des métadonnées. Pour modifier le comportement d'un objet, le code appelant ou le runtime doit vérifier la présence de l'attribut via la réflexion et entreprendre des actions supplémentaires.
Peut-on attribuer le même attribut plusieurs fois au même élément, et que faut-il pour cela ?
Par défaut - non. Pour cela, lors de la déclaration de l'attribut, il faut spécifier AllowMultiple:=True dans AttributeUsage. Alors, il est possible d'appliquer un attribut plusieurs fois à un même élément.
Les attributs sont-ils hérités de la classe de base à la classe dérivée ?
Non, par défaut - ils ne sont pas hérités. Si l'héritage est nécessaire, le paramètre Inherited:=True doit être spécifié dans AttributeUsage.
Dans un projet, des attributs personnalisés sont massivement ajoutés aux méthodes, mais personne n'implémente le traitement de ces attributs via la réflexion - ce code devient un ballast inutile, rendant la maintenance difficile et compliquant la lecture des sources.
Avantages :
Inconvénients :
L'attribut est utilisé pour annoter les méthodes de journalisation, et un sous-système distinct détermine automatiquement, via la réflexion, quelles méthodes doivent être auditées, ajoute des analyses et un traçage. Le comportement est transparent pour l'utilisateur.
Avantages :
Inconvénients :