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