AttributeUsage (Visual Basic)
Avgör hur en anpassad attributklass kan användas. AttributeUsage
är ett attribut som kan tillämpas på anpassade attributdefinitioner för att styra hur det nya attributet kan tillämpas. Standardinställningarna ser ut så här när de tillämpas explicit:
<System.AttributeUsage(System.AttributeTargets.All,
AllowMultiple:=False,
Inherited:=True)>
Class NewAttribute
Inherits System.Attribute
End Class
I det här exemplet NewAttribute
kan klassen tillämpas på valfri attribut-kapabel kodentitet, men kan endast tillämpas en gång på varje entitet. Den ärvs av härledda klasser när den tillämpas på en basklass.
Argumenten AllowMultiple
och Inherited
är valfria, så den här koden har samma effekt:
<System.AttributeUsage(System.AttributeTargets.All)>
Class NewAttribute
Inherits System.Attribute
End Class
Det första AttributeUsage
argumentet måste vara ett eller flera element i AttributeTargets uppräkningen. Flera måltyper kan länkas tillsammans med OR-operatorn, så här:
<AttributeUsage(AttributeTargets.Property Or AttributeTargets.Field)>
Class NewPropertyOrFieldAttribute
Inherits Attribute
End Class
AllowMultiple
Om argumentet är inställt på true
kan det resulterande attributet tillämpas mer än en gång på en enda entitet, så här:
<AttributeUsage(AttributeTargets.Class, AllowMultiple:=True)>
Class MultiUseAttr
Inherits Attribute
End Class
<MultiUseAttr(), MultiUseAttr()>
Class Class1
End Class
I det här fallet MultiUseAttr
kan tillämpas upprepade gånger eftersom AllowMultiple
är inställt på true
. Båda formaten som visas för att tillämpa flera attribut är giltiga.
Om Inherited
är inställt på false
ärvs inte attributet av klasser som härleds från en klass som tillskrivs. Till exempel:
<AttributeUsage(AttributeTargets.Class, Inherited:=False)>
Class Attr1
Inherits Attribute
End Class
<Attr1()>
Class BClass
End Class
Class DClass
Inherits BClass
End Class
I det här fallet Attr1
tillämpas inte på DClass
via arv.
Kommentarer
Attributet AttributeUsage
är ett engångsattribut – det kan inte tillämpas mer än en gång på samma klass. AttributeUsage
är ett alias för AttributeUsageAttribute.
Mer information finns i Accessing Attributes by Using Reflection (Visual Basic).
Exempel
I följande exempel visas effekten av argumenten Inherited
och AllowMultiple
för AttributeUsage
attributet och hur de anpassade attribut som tillämpas på en klass kan räknas upp.
' 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
Exempelutdata
Attributes on Base Class:
A1
A2
Attributes on Derived Class:
A3
A3
A2