Share via


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å truekan 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

Se även