Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Determina la modalità di utilizzo di una classe di attributi personalizzata.
AttributeUsage è un attributo che può essere applicato alle definizioni di attributi personalizzati per controllare la modalità di applicazione del nuovo attributo. Le impostazioni predefinite hanno un aspetto simile al seguente quando vengono applicate in modo esplicito:
<System.AttributeUsage(System.AttributeTargets.All,
AllowMultiple:=False,
Inherited:=True)>
Class NewAttribute
Inherits System.Attribute
End Class
In questo esempio la NewAttribute classe può essere applicata a qualsiasi entità di codice in grado di attributi, ma può essere applicata una sola volta a ogni entità. Viene ereditato dalle classi derivate quando viene applicato a una classe di base.
Gli argomenti AllowMultiple e Inherited sono facoltativi, quindi questo codice ha lo stesso effetto.
<System.AttributeUsage(System.AttributeTargets.All)>
Class NewAttribute
Inherits System.Attribute
End Class
Il primo argomento AttributeUsage deve consistere di uno o più elementi dell'enumerazione AttributeTargets. È possibile collegare più tipi di destinazione con l'operatore OR, come illustrato di seguito:
<AttributeUsage(AttributeTargets.Property Or AttributeTargets.Field)>
Class NewPropertyOrFieldAttribute
Inherits Attribute
End Class
Se l'argomento AllowMultiple è impostato su true, l'attributo risultante può essere applicato più volte a una singola entità, come illustrato di seguito:
<AttributeUsage(AttributeTargets.Class, AllowMultiple:=True)>
Class MultiUseAttr
Inherits Attribute
End Class
<MultiUseAttr(), MultiUseAttr()>
Class Class1
End Class
In questo caso MultiUseAttr può essere applicato ripetutamente perché AllowMultiple è impostato su true. Entrambi i formati illustrati per applicare più attributi sono validi.
Se Inherited è impostato su false, l'attributo non viene ereditato dalle classi derivate da una classe con attributi. Per esempio:
<AttributeUsage(AttributeTargets.Class, Inherited:=False)>
Class Attr1
Inherits Attribute
End Class
<Attr1()>
Class BClass
End Class
Class DClass
Inherits BClass
End Class
In questo caso Attr1 non viene applicato a DClass tramite ereditarietà.
Osservazioni:
L'attributo AttributeUsage è un attributo a uso singolo. Non può essere applicato più volte alla stessa classe.
AttributeUsage è un alias per AttributeUsageAttribute.
Per ulteriori informazioni, vedere Accesso agli attributi tramite reflection (Visual Basic).
Esempio
Nel seguente esempio viene illustrato l'effetto degli argomenti Inherited e AllowMultiple sull'attributo AttributeUsage e il modo in cui è possibile enumerare gli attributi personalizzati applicati a una classe.
' 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
Output di esempio
Attributes on Base Class:
A1
A2
Attributes on Derived Class:
A3
A3
A2