Partager via


AttributeUsage (Visual Basic)

Détermine comment une classe d’attributs personnalisée peut être utilisée. AttributeUsage est un attribut qui peut être appliqué aux définitions d’attributs personnalisées pour contrôler la façon dont le nouvel attribut peut être appliqué. Les paramètres par défaut ressemblent à ceci lorsqu’ils sont appliqués explicitement :

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

Dans cet exemple, la NewAttribute classe peut être appliquée à n’importe quelle entité de code capable d’attribut, mais ne peut être appliquée qu’une seule fois à chaque entité. Elle est héritée par des classes dérivées lorsqu’elles sont appliquées à une classe de base.

Les arguments AllowMultiple et Inherited sont facultatifs, donc ce code a le même effet :

<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 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 résultant peut être appliqué plusieurs fois à une seule 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 dérivées d’une classe attribuée. 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.

Remarques

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 Accès aux attributs à l’aide de la réflexion (Visual Basic).

Exemple :

L'exemple suivant montre l'effet des arguments Inherited et AllowMultiple sur l'attribut AttributeUsage, et comment 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