Delen via


AttributeUsage (Visual Basic)

Bepaalt hoe een aangepaste kenmerkklasse kan worden gebruikt. AttributeUsage is een kenmerk dat kan worden toegepast op aangepaste kenmerkdefinities om te bepalen hoe het nieuwe kenmerk kan worden toegepast. De standaardinstellingen zien er als volgt uit wanneer deze expliciet worden toegepast:

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

In dit voorbeeld kan de NewAttribute klasse worden toegepast op elke code-entiteit met kenmerken, maar kan deze slechts één keer worden toegepast op elke entiteit. Het wordt overgenomen door afgeleide klassen wanneer deze worden toegepast op een basisklasse.

De AllowMultiple en Inherited argumenten zijn optioneel, dus deze code heeft hetzelfde effect:

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

Het eerste AttributeUsage argument moet een of meer elementen van de AttributeTargets opsomming zijn. Meerdere doeltypen kunnen worden gekoppeld aan de OR-operator, zoals deze:

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

Als het AllowMultiple argument is ingesteld op true, kan het resulterende kenmerk meerdere keren worden toegepast op één entiteit, zoals:

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

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

In dit geval kan MultiUseAttr herhaaldelijk worden toegepast omdat AllowMultiple is ingesteld op true. Beide indelingen die worden weergegeven voor het toepassen van meerdere kenmerken, zijn geldig.

Als Inherited is ingesteld op false, wordt het kenmerk niet overgenomen door klassen die zijn afgeleid van een klasse waaraan het kenmerk is toegekend. Voorbeeld:

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

<Attr1()>
Class BClass

End Class

Class DClass
    Inherits BClass
End Class

In dit geval wordt Attr1 niet toegepast op DClass via overerving.

Opmerkingen

Het kenmerk is een kenmerk voor eenmalig gebruik. Het AttributeUsage kenmerk kan niet meer dan één keer worden toegepast op dezelfde klasse. AttributeUsage is een alias voor AttributeUsageAttribute.

Zie Toegang tot Attributen met Reflectie (Visual Basic) voor meer informatie.

Voorbeeld

In het volgende voorbeeld ziet u het effect van de Inherited en AllowMultiple argumenten op het AttributeUsage kenmerk en hoe de aangepaste kenmerken die op een klasse worden toegepast, kunnen worden geïnventariseerd.

' 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

Voorbeelduitvoer

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

Zie ook