AttributeUsage (Visual Basic)
Determina cómo se puede usar una clase de atributo personalizado. AttributeUsage
es un atributo que se puede aplicar a definiciones de atributos personalizados para controlar cómo se aplica el nuevo atributo. La configuración predeterminada presenta 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 clase NewAttribute
se puede aplicar a cualquier entidad de código atribuible, pero solo se puede aplicar una vez a cada entidad. Las clases derivadas la heredan cuando se aplica a una clase base.
Los argumentos AllowMultiple
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 diversos tipos de destino con el operador OR, de esta forma:
<AttributeUsage(AttributeTargets.Property Or AttributeTargets.Field)>
Class NewPropertyOrFieldAttribute
Inherits Attribute
End Class
Si el argumento AllowMultiple
se establece en true
, el atributo resultante se puede aplicar más de una vez a cada una de las entidades, del siguiente modo:
<AttributeUsage(AttributeTargets.Class, AllowMultiple:=True)>
Class MultiUseAttr
Inherits Attribute
End Class
<MultiUseAttr(), MultiUseAttr()>
Class Class1
End Class
En este caso, MultiUseAttr
se puede aplicar varias veces porque AllowMultiple
está establecido en true
. Los dos formatos mostrados para aplicar varios atributos son válidos.
Si Inherited
se establece en false
, las clases que se derivan de una clase con atributos no heredan el atributo. 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.
Comentarios
AttributeUsage
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 más información, vea Accessing Attributes by Using Reflection (Visual Basic) (Acceso a atributos mediante reflexión [Visual Basic]).
Ejemplo
En el ejemplo siguiente se muestra el efecto de los argumentos Inherited
y AllowMultiple
en el atributo AttributeUsage
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
- Attribute
- System.Reflection
- Guía de programación en Visual Basic
- Atributos
- Reflection (Visual Basic) (Reflexión [Visual Basic])
- Atributos de Visual Basic
- Creating Custom Attributes (Visual Basic) (Creación de atributos personalizados [Visual Basic])
- Accessing Attributes by Using Reflection (Visual Basic) (Acceso a atributos mediante reflexión [Visual Basic])