Aplicación de los atributos

Actualización: noviembre 2007

Puede aplicar atributos agregando bloques de atributos a elementos de programa como propiedades, métodos, eventos, clases y ensamblados. Un bloque de atributos consta de una lista de declaraciones de atributos separados por comas escrita entre corchetes angulares ("< >"). Una declaración de atributo consta de un modificador de atributo opcional, como Module o Assembly, un nombre de atributo, una lista (posiblemente sobrecargada) de parámetros por posición necesarios y una lista de argumentos con nombre opcionales. Debe colocar atributos con modificadores en una sección de atributos, al principio de un archivo de código fuente. En el siguiente ejemplo el código establece un atributo de ensamblado que define un título para el ensamblado y un atributo de módulo que indica que el módulo es compatible con CLS (especificación de lenguaje común):

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

Los atributos de ensamblado también se pueden aplicar mediante el archivo AssemblyInfo.vb, que se agrega automáticamente a los proyectos mediante la interfaz de usuario de Visual Studio. Este archivo contiene atributos de ensamblado con valores predeterminados o vacíos.

Cuando se aplican a elementos de programa como las propiedades, los atributos preceden al elemento. Por ejemplo, el código siguiente aplica atributos a una definición de clase:

<CustomAttr(Update:=True)> Class Class1

Por convención, todos los nombres de atributo finalizan con la palabra "Attribute" para distinguirlos de otros elementos de .NET Framework. No obstante, no tiene que especificar el sufijo de atributo cuando utiliza atributos. Por ejemplo, si tiene un atributo denominado CustomAttrAttribute, la especificación de <CustomAttr(Update:=True)> equivale a especificar <CustomAttrAttribute(Update:=True)>.

Argumentos de atributos

Los atributos utilizan argumentos opcionales, necesarios, por posición y por nombre casi del mismo modo en que los objetos utilizan estos tipos de argumentos. Los argumentos por posición son aquellos que se especifican en el orden en que se declararon para el constructor de un atributo. Por ejemplo, el código siguiente llama al constructor Sub New de un atributo con dos valores:

<CustomAttr(True, False)> Class Class1

Los argumentos que se pasan a Sub New en clases de atributos se suelen usar para inicializar los valores de campos y propiedades.

Puede utilizar argumentos con nombre para establecer directamente los valores de propiedades y campos. Para especificar los argumentos con nombre se anexa ":=" al nombre del argumento, seguido del valor que se está especificando. A diferencia de los argumentos por posición, es posible especificar argumentos con nombre en cualquier orden. Por ejemplo, el código siguiente establece el valor True para el campo Update y False para el campo Keep:

<CustomAttr(Update:=True, Keep:=False)> Class Class1
Nota:

Existe una importante diferencia entre los argumentos de atributo y los argumentos utilizados con las llamadas a métodos estándar. Debe utilizar argumentos por posición para los argumentos que se utilizan con el constructor Sub New de clases de atributos. Sólo es posible utilizar argumentos con nombre para establecer los valores de los campos y propiedades de las clases de atributos.

Los argumentos necesarios son los que siempre se deben especificar. Los argumentos opcionales son los que se pueden omitir utilizando una coma como marcador de posición cuando se utilizan argumentos por posición o simplemente omitirse cuando se utilizan argumentos con nombre.

Los argumentos de los atributos deben ser expresiones constantes.

Ejemplos de atributos

Los siguientes procedimientos proporcionan ejemplos de declaraciones de atributos:

Para utilizar el atributo MarshalAs para controlar cómo se calcula la referencia de los parámetros

  1. Agregue una instrucción Imports para el espacio de nombres System.Runtime.InteropServices al principio del código fuente:

    Imports System.Runtime.InteropServices
    
  2. Indique como prefijo de los parámetros el atributo MarshalAsAttribute y especifique el tipo de datos que requiere el destino. Por ejemplo, el código siguiente calcula referencias de dos parámetros como un puntero long de tipo de datos a una cadena (LPStr) de una función de la API de Windows:

    Declare Auto Sub CopyFile Lib "Kernel32.Lib" ( _
       <MarshalAs(UnmanagedType.LPWStr)> ByVal existingfile As String, _
       <MarshalAs(UnmanagedType.LPWStr)> ByVal newfile As String, _
       ByVal failifexists As Boolean _
    )
    

Common Language Runtime usa el atributo MarshalAsAttribute para determinar cómo debe calcularse la referencia de un parámetro entre el código administrado de Visual Basic y el código no administrado de una llamada a la API de Windows.

Para exponer un método a clientes Web remotos

  1. En el menú Archivo, haga clic en Proyecto, seleccione la plantilla Servicio Web ASP.NET y agregue una instrucción Imports para el espacio de nombres System.Web:

    Imports System.Web.Services
    
  2. Defina un método y utilice el atributo WebMethodAttribute para que el método pueda invocarse desde clientes Web remotos:

    <WebMethod()> Public Function HelloWorld() As String
        HelloWorld = "Hello World..."
    End Function
    

No es suficiente que un método de un servicio Web XML sea Public para exponerlo a clientes Web. Debe aplicar explícitamente el atributo WebMethodAttribute a un método antes de poder llamarlo mediante un cliente Web remoto.

Vea también

Tareas

Cómo: Definir atributos propios

Conceptos

Información general sobre los atributos de Visual Basic

Usos comunes de los atributos

Pasar argumentos por posición o por nombre

Referencia

WebMethodAttribute

Instrucción Imports (Tipo y espacio de nombres de .NET)

MarshalAsAttribute

System.Web

Otros recursos

Atributos personalizados en Visual Basic