Compartir a través de


Atributos comunes (Visual Basic)

En este tema se describen los atributos que se usan con más frecuencia en los programas de Visual Basic.

Atributos globales

La mayoría de los atributos se aplican a elementos de lenguaje específicos, como clases o métodos; sin embargo, algunos atributos son globales: se aplican a todo un ensamblado o módulo. Por ejemplo, el AssemblyVersionAttribute atributo se puede usar para insertar información de versión en un ensamblado, de la siguiente manera:

<Assembly: AssemblyVersion("1.0.0.0")>

Los atributos globales aparecen en el código fuente después de cualquier instrucción de nivel Imports superior y antes de cualquier declaración de tipo, módulo o espacio de nombres. Los atributos globales pueden aparecer en varios archivos de origen, pero los archivos deben compilarse en un solo paso de compilación. En el caso de los proyectos de Visual Basic, los atributos globales suelen colocarse en el archivo AssemblyInfo.vb (el archivo se crea automáticamente al crear un proyecto en Visual Studio).

Los atributos de ensamblado son valores que proporcionan información sobre un ensamblado. Se dividen en las siguientes categorías:

  • Atributos de identidad del ensamblado

  • Atributos informativos

  • Atributos de manifiesto del ensamblado

Atributos de identidad del ensamblado

Tres atributos (con un nombre seguro, si procede) determinan la identidad de un ensamblado: nombre, versión y referencia cultural. Estos atributos forman el nombre completo del ensamblado y son necesarios cuando se hace referencia a él en el código. Puede configurar la versión y la cultura de un ensamblado mediante atributos. Sin embargo, el valor de nombre lo establece el compilador, el IDE de Visual Studio en el cuadro de diálogo Información de ensamblado, o el Enlazador de ensamblados (Al.exe) cuando se crea el ensamblado, en función del archivo que contiene el manifiesto del ensamblado. El AssemblyFlagsAttribute atributo especifica si pueden coexistir varias copias del ensamblado.

En la tabla siguiente se muestran los atributos de identidad.

Atributo Propósito
AssemblyName Describe completamente la identidad de un ensamblado.
AssemblyVersionAttribute Especifica la versión de un ensamblaje.
AssemblyCultureAttribute Especifica qué referencia cultural admite el ensamblado.
AssemblyFlagsAttribute Especifica si un ensamblado admite la ejecución en paralelo en el mismo equipo, en el mismo proceso o en el mismo dominio de aplicación.

Atributos informativos

Puede usar atributos informativos para proporcionar información adicional de la empresa o del producto para un ensamblado. La siguiente tabla muestra los atributos de información definidos en el espacio de nombres System.Reflection.

Atributo Propósito
AssemblyProductAttribute Define un atributo personalizado que especifica un nombre de producto para un manifiesto de ensamblado.
AssemblyTrademarkAttribute Define un atributo personalizado que especifica una marca comercial para un manifiesto de ensamblaje.
AssemblyInformationalVersionAttribute Define un atributo personalizado que especifica una versión informativa para un manifiesto de ensamblado.
AssemblyCompanyAttribute Define un atributo personalizado que especifica un nombre de compañía para un manifiesto del ensamblado.
AssemblyCopyrightAttribute Define un atributo personalizado que especifica un copyright para un manifiesto del ensamblado.
AssemblyFileVersionAttribute Indica al compilador que use un número de versión específico para el recurso de versión del archivo Win32.
CLSCompliantAttribute Indica si el ensamblado es compatible con Common Language Specification (CLS).

Atributos de manifiesto del ensamblado

Puede usar los atributos de manifiesto del ensamblado para proporcionar información en el manifiesto del ensamblado Esto incluye título, descripción, alias predeterminado y configuración. En la tabla siguiente se muestran los atributos del manifiesto de ensamblado definidos en el espacio de nombres System.Reflection.

Atributo Propósito
AssemblyTitleAttribute Define un atributo personalizado que especifica un título de ensamblado para un manifiesto del ensamblado.
AssemblyDescriptionAttribute Define un atributo personalizado que especifica una descripción del ensamblado para un manifiesto de ensamblado.
AssemblyConfigurationAttribute Define un atributo personalizado que especifica una configuración de ensamblado (como retail o debug) para un manifiesto de ensamblado.
AssemblyDefaultAliasAttribute Define un alias predeterminado amigable para un manifiesto de ensamblaje

Atributo obsoleto

El Obsolete atributo marca una entidad de programa como una que ya no se recomienda para su uso. Cada uso de una entidad marcada como obsoleta generará posteriormente una advertencia o un error, en función de cómo se configure el atributo. Por ejemplo:

<System.Obsolete("use class B")>
Class A
    Sub Method()
    End Sub
End Class

Class B
    <System.Obsolete("use NewMethod", True)>
    Sub OldMethod()
    End Sub

    Sub NewMethod()
    End Sub
End Class

En este ejemplo, el Obsolete atributo se aplica a la clase A y al método B.OldMethod. Dado que el segundo argumento del constructor de atributos aplicado a B.OldMethod se establece trueen , este método provocará un error del compilador, mientras que el uso de la clase A solo generará una advertencia. En cambio, si se llama a B.NewMethod, no se generará ninguna advertencia o error.

La cadena proporcionada como primer argumento para el constructor de atributos se mostrará como parte de la advertencia o error. Por ejemplo, al usarla con las definiciones anteriores, el código siguiente genera dos advertencias y un error:

' Generates 2 warnings:
' Dim a As New A
' Generate no errors or warnings:

Dim b As New B
b.NewMethod()

' Generates an error, terminating compilation:
' b.OldMethod()

Se generan dos advertencias para la clase A: una para la declaración de la referencia de clase y otra para el constructor de clases.

El Obsolete atributo se puede usar sin argumentos, pero se recomienda incluir una explicación de por qué el elemento está obsoleto y qué usar en su lugar.

El atributo Obsolete es un atributo de uso único y se puede aplicar a cualquier entidad que admita atributos. Obsolete es un alias de ObsoleteAttribute.

Atributo condicional

El atributo Conditional hace que la ejecución de un método dependa de un identificador de preprocesamiento. El atributo Conditional es un alias de ConditionalAttribute y se puede aplicar a un método o a una clase de atributo.

En este ejemplo, Conditional se aplica a un método para habilitar o deshabilitar la visualización de información de diagnóstico específica del programa:

#Const TRACE_ON = True
Imports System.Diagnostics

Module TestConditionalAttribute
    Public Class Trace
        <Conditional("TRACE_ON")>
        Public Shared Sub Msg(ByVal msg As String)
            Console.WriteLine(msg)
        End Sub

    End Class

    Sub Main()
        Trace.Msg("Now in Main...")
        Console.WriteLine("Done.")
    End Sub
End Module

Si no se define el TRACE_ON identificador, no se mostrará ninguna salida de seguimiento.

El atributo Conditional se usa a menudo con el identificador DEBUG para habilitar características de seguimiento y registro de eventos en las compilaciones de depuración, pero no en las compilaciones de lanzamiento, como este ejemplo:

<Conditional("DEBUG")>
Shared Sub DebugMethod()

End Sub

Cuando se llama a un método marcado como condicional, la presencia o ausencia del símbolo de preprocesamiento especificado determina si la llamada se incluye o se omite. Si el símbolo está definido, se incluye la llamada; de lo contrario, se omite la llamada. El uso Conditional es una alternativa más limpia, elegante y menos propensa a errores para incluir métodos dentro #if…#endif de bloques, como este:

#If DEBUG Then
    Sub ConditionalMethod()
    End Sub
#End If

Un método condicional debe ser un método en una declaración de clase o estructura y no debe tener un valor devuelto.

Uso de varios identificadores

Si un método tiene varios Conditional atributos, se incluye una llamada al método si se define al menos uno de los símbolos condicionales (es decir, los símbolos se vinculan lógicamente mediante el operador OR). En este ejemplo, la presencia de ya sea A o B dará como resultado una llamada al método:

<Conditional("A"), Conditional("B")>
Shared Sub DoIfAorB()

End Sub

Para lograr el efecto de vincular lógicamente símbolos mediante el operador AND, puede definir métodos condicionales serie. Por ejemplo, el segundo método siguiente solo se ejecutará si tanto A como B están definidos:

<Conditional("A")>
Shared Sub DoIfA()
    DoIfAandB()
End Sub

<Conditional("B")>
Shared Sub DoIfAandB()
    ' Code to execute when both A and B are defined...
End Sub

Uso de condicional con clases de atributo

El atributo Conditional también se puede aplicar a una definición de clase de atributo. En este ejemplo, el atributo Documentation personalizado solo agregará información a los metadatos si se define DEBUG.

<Conditional("DEBUG")>
Public Class Documentation
    Inherits System.Attribute
    Private text As String
    Sub New(ByVal doc_text As String)
        text = doc_text
    End Sub
End Class

Class SampleClass
    ' This attribute will only be included if DEBUG is defined.
    <Documentation("This method displays an integer.")>
    Shared Sub DoWork(ByVal i As Integer)
        System.Console.WriteLine(i)
    End Sub
End Class

Atributos de información del autor de la llamada

Mediante los atributos de información del llamador, se puede obtener información sobre el llamador de un método. Puede obtener la ruta de acceso al código fuente, el número de línea del código fuente y el nombre del miembro del llamador.

Para obtener la información del llamador del miembro, use los atributos que se aplican a los parámetros opcionales. Cada parámetro opcional especifica un valor predeterminado. En la tabla siguiente se enumeran los atributos de información del llamante que se definen en el System.Runtime.CompilerServices espacio de nombres:

Atributo Descripción Tipo
CallerFilePathAttribute Ruta de acceso completa del archivo de código fuente que contiene el llamador. Esta es la ruta en tiempo de compilación. String
CallerLineNumberAttribute Número de línea del archivo de origen desde el que se llama al método . Integer
CallerMemberNameAttribute Nombre del método o nombre de propiedad del autor de la llamada. Para obtener más información, vea Información del autor de la llamada (Visual Basic). String
CallerArgumentExpressionAttribute Expresión usada por la persona que llama para un argumento. Para obtener más información, vea Información del autor de la llamada (Visual Basic). String

Para obtener más información sobre los atributos de información del llamante, vea Información del llamante (Visual Basic).

Atributos de Visual Basic

En la tabla siguiente se enumeran los atributos específicos de Visual Basic.

Atributo Propósito
ComClassAttribute Indica al compilador que la clase debe exponerse como un objeto COM.
HideModuleNameAttribute Permite acceder a los miembros del módulo mediante solo la calificación necesaria para el módulo.
VBFixedStringAttribute Especifica el tamaño de una cadena de longitud fija en una estructura para su uso con funciones de entrada y salida de archivos.
VBFixedArrayAttribute Especifica el tamaño de una matriz fija en una estructura para su uso con funciones de entrada y salida de archivo.

COMClassAttribute (atributo de clase COM)

Use COMClassAttribute para simplificar el proceso de creación de componentes COM desde Visual Basic. Los objetos COM son considerablemente diferentes de los ensamblados de .NET Framework y sin COMClassAttribute, debe seguir varios pasos para generar un objeto COM desde Visual Basic. En el caso de las clases marcadas con COMClassAttribute, el compilador realiza muchos de estos pasos automáticamente.

HideModuleNameAttribute

Use HideModuleNameAttribute para permitir el acceso a los miembros del módulo mediante solo la calificación necesaria para el módulo.

VBFixedStringAttribute

Use VBFixedStringAttribute para forzar a Visual Basic a crear una cadena de longitud fija. Las cadenas son de longitud variable de forma predeterminada y este atributo es útil al almacenar cadenas en archivos. El código siguiente muestra esto:

Structure Worker
    ' The runtime uses VBFixedString to determine
    ' if the field should be written out as a fixed size.
    <VBFixedString(10)> Public LastName As String
    <VBFixedString(7)> Public Title As String
    <VBFixedString(2)> Public Rank As String
End Structure

VBFixedArrayAttribute

Use VBFixedArrayAttribute para declarar matrices fijas de tamaño. Al igual que las cadenas de Visual Basic, las matrices tienen una longitud variable de forma predeterminada. Este atributo es útil al serializar o escribir datos en archivos.

Consulte también