Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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