Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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