Compartilhar via


AttributeUsage (Visual Basic)

Determina como uma classe de atributo personalizado pode ser usada. AttributeUsage é um atributo que pode ser aplicado às definições de atributo personalizado para controlar como o novo atributo pode ser aplicado. As configurações padrão têm essa aparência quando aplicadas explicitamente:

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

Neste exemplo, a classe NewAttribute pode ser aplicada a qualquer entidade de código capaz de receber atributo, mas pode ser aplicadas apenas uma vez para cada entidade. Ela é herdada por classes derivadas quando aplicada a uma classe base.

Os argumentos AllowMultiple e Inherited são opcionais, portanto, esse código tem o mesmo efeito:

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

O primeiro argumento AttributeUsage deve ser um ou mais elementos da enumeração AttributeTargets. Vários tipos de destino podem ser vinculados junto com o operador OR, dessa maneira:

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

Se o argumento AllowMultiple for definido como true, o atributo resultante poderá ser aplicado mais de uma vez a uma única entidade, dessa maneira:

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

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

Nesse caso MultiUseAttr pode ser aplicado repetidas vezes porque AllowMultiple está definido como true. Os dois formatos mostrados para a aplicação de vários atributos são válidos.

Se Inherited for definido como false, o atributo não será herdado por classes derivadas de uma classe que é atribuída. Por exemplo:

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

<Attr1()>
Class BClass

End Class

Class DClass
    Inherits BClass
End Class

Nesse caso Attr1 não é aplicado a DClass por meio de herança.

Comentários

O atributo AttributeUsage é um atributo de uso único. Ele não pode ser aplicado mais de uma vez para a mesma classe. AttributeUsage é um alias para AttributeUsageAttribute.

Para obter mais informações, consulte Acessando atributos usando reflexão (Visual Basic).

Exemplo

O exemplo a seguir demonstra o efeito dos argumentos Inherited e AllowMultiple no atributo AttributeUsage e como os atributos personalizados aplicados a uma classe podem ser enumerados.

' 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

Saída de exemplo

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

Confira também