Información general sobre los atributos (Visual Basic)

Los atributos proporcionan un método eficaz para asociar metadatos, o información declarativa, con código (ensamblados, tipos, métodos, propiedades, etc.). Después de asociar un atributo con una entidad de programa, se puede consultar el atributo en tiempo de ejecución mediante la utilización de una técnica denominada reflexión. Para más información, vea Reflexión (Visual Basic).

Los atributos tienen las propiedades siguientes:

  • Los atributos agregan metadatos al programa. Los metadatos son información sobre los tipos definidos en un programa. Todos los ensamblados .NET contienen un conjunto de metadatos específico que describe los tipos y miembros de tipo definidos en el ensamblado. Puede agregar atributos personalizados para especificar cualquier información adicional que sea necesaria. Para más información, vea Creating Custom Attributes (Visual Basic) (Creación de atributos personalizados [Visual Basic]).

  • Puede aplicar uno o más atributos a todos los ensamblados, módulos o elementos de programa más pequeños como clases y propiedades.

  • Los atributos pueden aceptar argumentos de la misma manera que los métodos y las propiedades.

  • El programa puede examinar sus propios metadatos o los metadatos de otros programas mediante la reflexión. Para más información, vea Accessing Attributes by Using Reflection (Visual Basic) (Acceso a atributos mediante reflexión [Visual Basic]).

Utilizar atributos

Los atributos se pueden colocar en la mayoría de las declaraciones, aunque un determinado atributo podría restringir los tipos de declaraciones en que es válido. En Visual Basic, un atributo se encierra entre corchetes angulares (<>). Debe aparecer inmediatamente antes del elemento al que se aplica, en la misma línea.

En este ejemplo, el atributo SerializableAttribute se usa para aplicar una característica específica a una clase:

<System.Serializable()> Public Class SampleClass
    ' Objects of this type can be serialized.
End Class

Un método con el atributo DllImportAttribute se declara de esta forma:

Imports System.Runtime.InteropServices
<System.Runtime.InteropServices.DllImport("user32.dll")>
Sub SampleMethod()
End Sub

En una declaración se puede colocar más de un atributo:

Imports System.Runtime.InteropServices
Sub MethodA(<[In](), Out()> ByVal x As Double)
End Sub
Sub MethodB(<Out(), [In]()> ByVal x As Double)
End Sub

Algunos atributos se pueden especificar más de una vez para una entidad determinada. Un ejemplo de este tipo de atributos multiuso es ConditionalAttribute:

<Conditional("DEBUG"), Conditional("TEST1")>
Sub TraceMethod()
End Sub

Nota

Por convención, todos los nombres de atributos terminan con la palabra "Attribute" para distinguirlos de otros elementos de .NET Framework. Sin embargo, no es necesario especificar el sufijo de atributo cuando utiliza atributos en el código. Por ejemplo, [DllImport] es equivalente a [DllImportAttribute], pero DllImportAttribute es el nombre del atributo real en .NET Framework.

Parámetros de atributo

Muchos atributos tienen parámetros, que pueden ser posicionales, sin nombre o con nombre. Los parámetros posicionales deben especificarse en un determinado orden y no se pueden omitir; los parámetros con nombre son opcionales y se pueden especificar en cualquier orden. Los parámetros posicionales se especifican en primer lugar. Por ejemplo, estos tres atributos son equivalentes:

<DllImport("user32.dll")>
<DllImport("user32.dll", SetLastError:=False, ExactSpelling:=False)>
<DllImport("user32.dll", ExactSpelling:=False, SetLastError:=False)>

El primer parámetro, el nombre del archivo DLL, es posicional y siempre va primero; los demás tienen un nombre. En este caso, ambos parámetros con nombre tienen el estado false de forma predeterminada, por lo que se pueden omitir. Consulte la documentación del atributo individual para obtener información sobre los valores de parámetro predeterminados.

Destinos de atributo

El destino de un atributo es la entidad a la que se aplica el atributo. Por ejemplo, puede aplicar un atributo a una clase, un método determinado o un ensamblado completo. De forma predeterminada, el atributo se aplica al elemento que lo precede. Pero puede identificar explícitamente, por ejemplo, si se aplica un atributo a un método, a su parámetro o a su valor devuelto.

Para identificar un destino de atributo de forma explícita, use la sintaxis siguiente:

<target : attribute-list>

La lista de posibles valores target se muestra en la tabla siguiente.

Valor del objetivo Se aplica a
assembly Ensamblado completo
module Módulo del ensamblado actual (que es diferente de un módulo de Visual Basic)

En el ejemplo siguiente se muestra cómo aplicar atributos a ensamblados y módulos. Para más información, vea Atributos comunes (Visual Basic).

Imports System.Reflection
<Assembly: AssemblyTitleAttribute("Production assembly 4"),
Module: CLSCompliant(True)>

Usos comunes de los atributos

La lista siguiente incluye algunos de los usos comunes de atributos en el código:

  • Marcar métodos con el atributo WebMethod en los servicios web para indicar que el método debe ser invocable a través del protocolo SOAP. Para obtener más información, vea WebMethodAttribute.

  • Describir cómo serializar parámetros de método al interoperar con código nativo. Para obtener más información, vea MarshalAsAttribute.

  • Describir las propiedades COM para clases, métodos e interfaces.

  • Llamar al código no administrado mediante la clase DllImportAttribute.

  • Describir los ensamblados en cuanto a título, versión, descripción o marca.

  • Describir qué miembros de una clase serializar para la persistencia.

  • Describir cómo realizar asignaciones entre los miembros de clase y los nodos XML para la serialización XML.

  • Describir los requisitos de seguridad para los métodos.

  • Especificar las características utilizadas para reforzar la seguridad.

  • Controlar optimizaciones mediante el compilador Just-In-Time (JIT) para que el código siga siendo fácil de depurar.

  • Obtener información sobre el llamador de un método.

Para obtener más información, consulte:

Consulte también