Compartir a través de


AttributeUsage (Visual Basic)

Determina cómo se puede usar una clase de atributo personalizada. AttributeUsage es un atributo que se puede aplicar a definiciones de atributos personalizados para controlar cómo se puede aplicar el nuevo atributo. La configuración predeterminada tiene este aspecto cuando se aplica explícitamente:

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

En este ejemplo, la NewAttribute clase se puede aplicar a cualquier entidad de código capaz de atributos, pero solo se puede aplicar una vez a cada entidad. Las clases derivadas la heredan cuando se aplica a una clase base.

Los AllowMultiple argumentos y Inherited son opcionales, por lo que este código tiene el mismo efecto:

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

El primer argumento AttributeUsage debe ser uno o varios elementos de la enumeración AttributeTargets. Se pueden vincular varios tipos de destino junto con el operador OR, de la siguiente manera:

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

Si el argumento AllowMultiple se establece en true, el atributo resultante puede aplicarse más de una vez a una sola entidad, de la siguiente manera:

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

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

En este caso MultiUseAttr se puede aplicar repetidamente porque AllowMultiple se establece en true. Los dos formatos mostrados para aplicar varios atributos son válidos.

Si Inherited se establece en false, el atributo no se hereda por las clases que se derivan de una clase a la que se le ha atribuido. Por ejemplo:

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

<Attr1()>
Class BClass

End Class

Class DClass
    Inherits BClass
End Class

En este caso Attr1 no se aplica a DClass a través de la herencia.

Observaciones

El AttributeUsage atributo es un atributo de uso único; no se puede aplicar más de una vez a la misma clase. AttributeUsage es un alias de AttributeUsageAttribute.

Para obtener más información, vea Obtener acceso a atributos mediante reflexión (Visual Basic).

Ejemplo

En el ejemplo siguiente se muestra el efecto de los Inherited argumentos y AllowMultiple para el AttributeUsage atributo y cómo se pueden enumerar los atributos personalizados aplicados a una clase.

' 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

Salida de ejemplo

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

Consulte también