Condividi tramite


AttributeUsage (Visual Basic)

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

Vedere anche