Freigeben über


AttributeUsage (Visual Basic)

Bestimmt, wie eine benutzerdefinierte Attributklasse verwendet werden kann. AttributeUsage ist ein Attribut, das auf benutzerdefinierte Attributdefinitionen angewendet werden kann, um zu steuern, wie das neue Attribut angewendet werden kann. Die Standardeinstellungen sehen wie folgt aus, wenn sie explizit angewendet werden:

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

In diesem Beispiel kann die NewAttribute Klasse auf jede attributfähige Codeentität angewendet werden, kann jedoch nur einmal auf jede Entität angewendet werden. Sie wird von abgeleiteten Klassen geerbt, wenn sie auf eine Basisklasse angewendet wird.

Die AllowMultiple und Inherited Argumente sind optional, sodass dieser Code die gleiche Wirkung hat.

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

Das erste AttributeUsage-Argument muss mindestens ein Element der AttributeTargets-Enumeration sein. Mehrere Zieltypen können wie folgt mit dem OR-Operator verknüpft werden:

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

Wenn das AllowMultiple Argument auf true festgelegt ist, kann das resultierende Attribut mehrmals auf eine einzelne Entität wie folgt angewendet werden:

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

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

In diesem Fall kann MultiUseAttr wiederholt angewendet werden, da AllowMultiple auf true gesetzt ist. Beide gezeigten Formate für das Anwenden von mehreren Attributen sind gültig.

Wenn Inherited auf false gesetzt ist, wird das Attribut nicht von Klassen geerbt, die von einer Klasse abgeleitet sind, der das Attribut zugewiesen ist. Beispiel:

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

<Attr1()>
Class BClass

End Class

Class DClass
    Inherits BClass
End Class

In diesem Fall wird Attr1 nicht über Vererbung auf DClass angewendet.

Bemerkungen

Das AttributeUsage Attribut ist ein single-use-Attribut – es kann nicht mehr als einmal auf dieselbe Klasse angewendet werden. AttributeUsage ist ein Alias für AttributeUsageAttribute.

Weitere Informationen finden Sie unter Zugreifen auf Attribute mithilfe von Reflection (Visual Basic).For more information, see Accessing Attributes by Using Reflection (Visual Basic).

Beispiel

Im folgenden Beispiel werden die Auswirkungen der Inherited und AllowMultiple Argumente auf das AttributeUsage Attribut sowie die Möglichkeit veranschaulicht, wie benutzerdefinierte Attribute, die auf eine Klasse angewendet wurden, aufgezählt werden können.

' 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

Beispielausgabe

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

Siehe auch