Partager via


AttributeUsage (Visual Basic)

Détermine de quelle manière une classe d’attributs personnalisés peut être utilisée. AttributeUsage est un attribut qui peut être appliqué à des définitions d’attributs personnalisés pour contrôler le mode d’application du nouvel attribut. Voici le code quand les paramètres par défaut sont appliqués de manière explicite :

<System.AttributeUsage(System.AttributeTargets.All,
                   AllowMultiple:=False,
                   Inherited:=True)>
Class NewAttribute
    Inherits System.Attribute
End Class

Dans cet exemple, la classe NewAttribute peut être appliquée à toutes les entités de code acceptant un attribut, mais uniquement une fois par entité. Elle est héritée par les classes dérivées quand elle est appliquée à une classe de base.

Les arguments AllowMultiple et Inherited étant facultatifs, ce code produit le même résultat :

<System.AttributeUsage(System.AttributeTargets.All)>
Class NewAttribute
    Inherits System.Attribute
End Class

Le premier argument AttributeUsage doit correspondre à un ou plusieurs éléments de l’énumération AttributeTargets. Plusieurs types de cibles peuvent être liés avec l’opérateur OR, comme suit :

<AttributeUsage(AttributeTargets.Property Or AttributeTargets.Field)>
Class NewPropertyOrFieldAttribute
    Inherits Attribute
End Class

Si l’argument AllowMultiple est défini sur true, l’attribut qui en résulte peut être appliqué plusieurs fois à une même entité, comme suit :

<AttributeUsage(AttributeTargets.Class, AllowMultiple:=True)>
Class MultiUseAttr
    Inherits Attribute
End Class

<MultiUseAttr(), MultiUseAttr()>
Class Class1
End Class

Dans ce cas, MultiUseAttr peut être appliqué à plusieurs reprises, car AllowMultiple est défini sur true. Les deux formats indiqués pour appliquer plusieurs attributs sont valides.

Si Inherited est défini sur false, l’attribut n’est pas hérité par les classes qui sont dérivées d’une classe avec attributs. Par exemple :

<AttributeUsage(AttributeTargets.Class, Inherited:=False)>
Class Attr1
    Inherits Attribute
End Class

<Attr1()>
Class BClass

End Class

Class DClass
    Inherits BClass
End Class

Dans ce cas, Attr1 n’est pas appliqué à DClass par héritage.

Notes

L’attribut AttributeUsage est un attribut à usage unique : il ne peut pas être appliqué plusieurs fois à la même classe. AttributeUsage est un alias pour AttributeUsageAttribute.

Pour plus d’informations, consultez la page Accéder à des attributs grâce à la réflexion (Visual Basic).

Exemple

L’exemple suivant illustre l’effet des arguments Inherited et AllowMultiple sur l’attribut AttributeUsage, et la manière dont les attributs personnalisés appliqués à une classe peuvent être énumérés.

' Create some custom attributes:
<AttributeUsage(System.AttributeTargets.Class, Inherited:=False)>
Class A1
    Inherits System.Attribute
End Class

<AttributeUsage(System.AttributeTargets.Class)>
Class A2
    Inherits System.Attribute
End Class

<AttributeUsage(System.AttributeTargets.Class, AllowMultiple:=True)>
Class A3
    Inherits System.Attribute
End Class

' Apply custom attributes to classes:
<A1(), A2()>
Class BaseClass

End Class

<A3(), A3()>
Class DerivedClass
    Inherits BaseClass
End Class

Public Class TestAttributeUsage
    Sub Main()
        Dim b As New BaseClass
        Dim d As New DerivedClass
        ' Display custom attributes for each class.
        Console.WriteLine("Attributes on Base Class:")
        Dim attrs() As Object = b.GetType().GetCustomAttributes(True)

        For Each attr In attrs
            Console.WriteLine(attr)
        Next

        Console.WriteLine("Attributes on Derived Class:")
        attrs = d.GetType().GetCustomAttributes(True)
        For Each attr In attrs
            Console.WriteLine(attr)
        Next
    End Sub
End Class

Exemple de sortie

Attributes on Base Class:
A1
A2
Attributes on Derived Class:
A3
A3
A2

Voir aussi