Instrucción Dim (Visual Basic)

Actualización: noviembre 2007

Declara y asigna espacio para almacenar una o más variables.

[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ] 
Dim [ WithEvents ] variablelist

Partes

  • attributelist
    Opcional. Vea Lista de atributos.

  • accessmodifier
    Opcional. Puede ser una de las siguientes:

    Vea Niveles de acceso en Visual Basic.

  • Shared
    Opcional. Vea Shared.

  • Shadows
    Opcional. Vea Shadows.

  • Static
    Opcional. Vea Static.

  • ReadOnly
    Opcional. Vea ReadOnly.

  • WithEvents
    Opcional. Especifica que éstas son variables de objeto que hacen referencia a instancias de una clase que puede provocar eventos. Vea WithEvents.

  • variablelist
    Obligatorio. Lista de variables que se declara en esta instrucción.

    variable [ , variable ... ]

    Cada variable tiene la sintaxis y las partes siguientes:

    variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With { [ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]

    Parte

    Descripción

    variablename

    Obligatorio. Nombre de la variable. Vea Nombres de elementos declarados.

    boundslist

    Opcional. Lista de límites de cada dimensión de una variable de matriz.

    New

    Opcional. Crea una nueva instancia de la clase cuando se ejecuta la instrucción Dim.

    datatype

    Obligatorio si Option Strict es On. Tipo de datos de la variable.

    With

    Opcional. Incluye la lista de inicializadores de objeto.

    propertyname

    Opcional. Nombre de una propiedad en la clase de la que se está creando una instancia.

    propinitializer

    Se requiere después de propertyname =. Expresión que se evalúa y se asigna al nombre de propiedad.

    initializer

    Opcional si no se especifica New. Expresión que se evalúa y se asigna a la variable cuando se crea.

Comentarios

Se deben declarar todas las variables que se utilizan en un programa para indicar al compilador de Visual Basic el tipo de datos de la variable y otra información, por ejemplo qué código puede tener acceso a la misma. En el ejemplo siguiente se declara una variable que contiene un valor Integer.

Dim numberOfStudents As Integer

Sólo se puede utilizar Dim en el nivel de módulo o procedimiento. Esto significa que el contexto de declaración de una variable tiene que ser una clase, estructura, módulo, procedimiento o bloque, y no puede ser un archivo de código fuente, espacio de nombres o interfaz. Para obtener más información, vea Contextos de declaración y niveles de acceso predeterminados.

Si Option Explicit es On (el valor predeterminado), el compilador requiere una declaración para cada variable que se utiliza. Si se activa Option Explicit Off, el valor predeterminado de las variables no declaradas es Object (Tipo de datos), que podría no ser el que se desea.

Puede especificar el tipo de datos de cada variable en la instrucción Dim. También puede especificar un valor inicial. Si no lo hace, Visual Basic utiliza la configuración predeterminada. Para obtener más información, vea "Reglas de tipos de datos" y "Valores predeterminados" en la sección "Información detallada" de esta página de Ayuda. En el ejemplo siguiente se declara e inicializa una variable String.

Dim summary As String = "Summary of results" 

Puede especificar qué código puede tener acceso a una variable proporcionando accessmodifier en la instrucción Dim. Para obtener más información, vea "Modificadores" y "Nivel de acceso" en la sección "Información detallada" de esta página de Ayuda.

Puede declarar una variable para contener una matriz, que puede almacenar varios valores. Para obtener más información, vea "Reglas de matrices" en la sección "Información detallada" de esta página de Ayuda. Para obtener más información sobre las matrices, vea Matrices en Visual Basic. En el ejemplo siguiente se declara una variable de matriz Integer.

Dim days() As Integer 

En general, debe colocar todas las instrucciones Dim al inicio del área de código donde usa las variables. Para obtener más información, vea "Solución de problemas" en la sección "Información detallada" de esta página de Ayuda.

Visual Basic 2008 incluye inicializadores de objeto, que se usan para declarar instancias de tipos con nombre y anónimos, e inferencia de tipo de variable local. Para obtener más información, vea Tipos anónimos, Inicializadores de objeto: Tipos con nombre y anónimos y Inferencia de tipo de variable local.

Información detallada

En esta sección se tratan detalladamente las áreas siguientes:

  • Declaración

  • Tipos de datos

  • Matrices

  • Comportamiento

  • Solución de problemas

Reglas de declaración

  • Contexto de declaración. Una variable declarada en el nivel de módulo, fuera de cualquier procedimiento, es una variable miembro o un campo; es miembro de la clase, estructura, módulo o interfaz que la declara.

    Una variable declarada en el nivel de procedimiento es una variable local; es local al procedimiento o bloque que la declara.

  • Atributos. Sólo se pueden aplicar atributos a las variables miembro, no a las variables locales. Un atributo proporciona información a los metadatos del ensamblado, que no son significativos para el almacenamiento temporal como las variables locales.

  • Uso implícito de Dim. Si se especifica uno de los modificadores Public, Protected, Friend, Protected Friend, Private, Shared, Shadows, Static, ReadOnly o WithEvents, se puede omitir opcionalmente la palabra clave Dim.

    Public maximumAllowed As Double
    Protected Friend currentUserName As String
    Private salary As Decimal
    Static runningTotal As Integer
    

    En el nivel de módulo, no se puede utilizar el modificador Static para declarar variables miembro. En el nivel de procedimiento, no se puede utilizar Shared, Shadows, ReadOnly, WithEvents ni un modificador de acceso para declarar variables locales.

  • Variables WithEvents. Sólo se puede especificar WithEvents en variables miembro, no en variables locales dentro de un procedimiento.

    Si especifica WithEvents, el tipo de datos de las variables debe ser un tipo de clase concreto que no sea Object. No se puede declarar una matriz con WithEvents.

    Para obtener más información sobre los eventos, vea Eventos y controladores de eventos.

  • Varias variables. Se pueden declarar varias variables en la misma instrucción de declaración si se especifica la parte variablename para cada uno y se sigue cada nombre de matriz con paréntesis. Las variables múltiples se separan con comas.

    Dim lastTime, nextTime, allTimes() As Date
    

Reglas de tipos de datos

  • Tipos de datos. La instrucción Dim puede declarar el tipo de datos de una variable. Se puede especificar cualquier tipo de datos o el nombre de una enumeración, estructura, clase o interfaz.

    Dim finished As Boolean
    Dim monitorBox As System.Windows.Forms.Form
    
  • Tipo predeterminado. Si no se especifica datatype, la variable toma el tipo de datos de initializer. Si ni datatype ni initializer están presentes, el tipo de datos es Object (Tipo de datos) de forma predeterminada. Si se especifica datatype e initializer, el tipo de datos de initializer debe ser convertible a datatype.

  • Tipos diferentes. Se pueden especificar tipos de datos diferentes para variables diferentes utilizando una cláusula As independiente para cada variable declarada. Opcionalmente, es posible declarar varias variables que sean del mismo tipo utilizando una cláusula As común. Todas las variables toman el tipo de datos especificado en la primera cláusula As que se encuentre después de su parte variablename correspondiente.

    Dim a, b, c As Single, x, y As Double, i As Integer
    ' a, b, and c are all Single; x and y are both Double
    
  • Inicialización. La instrucción Dim puede inicializar el contenido de las variables seleccionadas en variablelist. En un tipo de valor, initializer se utiliza para proporcionar una expresión que se va a asignar a la variable. La expresión se debe evaluar como una constante que se puede calcular en tiempo de compilación.

    Dim quantity As Integer = 10
    Dim message As String = "Just started"
    

    En un tipo de referencia, la palabra clave New se utiliza para crear una nueva instancia de la clase o estructura especificada por datatype. Si utiliza New, no utilice una expresión initializer. En su lugar, si son necesarios, proporcione argumentos al constructor de la clase a partir de la que está creando la variable.

    Dim bottomLabel As New System.Windows.Forms.Label
    

    Si declara más de una variable con la misma cláusula As, no puede proporcionar un initializer para ese grupo de variables.

Reglas de matrices

  • Variables de matriz. Para especificar que una variable en variablelist es una matriz, siga inmediatamente su variablename con paréntesis. Si la matriz tiene más de una dimensión, debe incluir comas entre los paréntesis para indicar el número de dimensiones.

    Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte
    

    Una matriz puede tener de 1 a 32 dimensiones.

    Para obtener más información, vea Matrices en Visual Basic.

  • Límites de matrices. Se puede especificar el límite inferior y superior de cada dimensión. Para ello, incluya boundslist dentro de los paréntesis. En cada dimensión, boundslist especifica el límite superior y, opcionalmente, el límite inferior. El límite inferior siempre es cero, tanto si se especifica como si no. Cada índice puede variar de cero hasta el valor de su límite superior.

    Las dos instrucciones siguientes son equivalentes. Cada instrucción declara una matriz de 21 elementos Integer. Cuando se tiene acceso a la matriz, el índice puede variar de 0 a 20.

    Dim totals(20) As Integer
    Dim totals(0 To 20) As Integer
    

    La instrucción siguiente declara una matriz bidimensional de tipo Double. La matriz tiene 4 filas (3 + 1) de 6 columnas (5 + 1) cada una.

    Dim matrix2(3, 5) As Double
    

    Observe que el límite superior representa el valor más alto posible del índice, no la longitud de la dimensión, que es el límite superior más uno.

  • Límites de matrices en blanco. Todos los límites de una declaración de matriz se pueden dejar en blanco. En este caso, la matriz tiene el número de dimensiones que especifica, pero se no se inicializa. Por consiguiente, tiene el valor Nothing hasta que se inicialicen por lo menos algunos de sus elementos. La instrucción Dim debe especificar los límites para todas las dimensiones o para ninguna de ellas.

    Dim messages() As String
    
  • Matrices vacías. Es posible utilizar –1 para declarar el límite superior de una dimensión de matriz. Esto significa que la matriz está vacía, pero no es Nothing, una distinción que requieren algunas funciones del Common Language Runtime. Sin embargo, el código de Visual Basic no puede obtener acceso a este tipo de matriz. Si se intenta, se produce un error IndexOutOfRangeException durante la ejecución. Para obtener más información, vea Cómo: Crear una matriz sin elementos.

  • Inicialización de matrices. Los valores de una matriz se pueden inicializar rodeando los valores de inicialización con llaves ({}).

    Dim longArray() As Long = {0, 1, 2, 3}
    

    En las matrices multidimensionales, la inicialización de cada dimensión está entre llaves en la dimensión exterior. Los elementos se especifican en orden de importancia de filas.

    Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}}
    

Comportamiento

  • Valores predeterminados. Si no se especifica initializer en una variable, Visual Basic la inicializa con el valor predeterminado del tipo de datos. En la tabla siguiente se muestran los valores de inicialización predeterminados.

    Tipo de datos

    Valor predeterminado

    Todos los tipos numéricos (incluso Byte y SByte)

    0

    Char

    Binario 0

    Todas las referencias de tipo (incluidas Object, String y todas las matrices).

    Nothing

    Boolean

    False

    Date

    12:00 a.m. del 1 de enero del año 1 (01/01/0001 12:00:00 a.m.)

    Cada elemento de una estructura se inicializa como si fuera una variable independiente. Si se declara la longitud de una matriz pero no se inicializan sus elementos, éstos se inicializan como si fueran una variable independiente.

  • **Nivel de acceso.**Las variables miembro de clase y módulo (fuera de cualquier procedimiento) tienen como valor predeterminado el acceso privado y las variables miembro de estructura tienen como valor predeterminado el acceso público. Sus niveles de acceso se pueden ajustar con los modificadores de acceso. No puede utilizar modificadores de acceso en variables locales (dentro de un procedimiento).

  • Ámbito. Las variables locales sólo están en ámbito dentro de su procedimiento o bloque. Las variables miembro están en ámbito a lo largo de su clase, estructura o módulo.

  • Calificación. El código externo a una clase, estructura o módulo debe calificar el nombre de una variable miembro con el nombre de esa clase, estructura o módulo. El código externo a un procedimiento o bloque no puede hacer referencia a ninguna variable local dentro de ese procedimiento o bloque.

  • Período de duración. Una variable local Static tiene un período de duración más largo que el del procedimiento en el que se declara. Los límites de la duración de la variable dependen de dónde se declare el procedimiento y si es Shared.

    Declaración de procedimiento

    La variable se inicializa

    La variable deja de existir

    En un módulo

    La primera vez que se llama al procedimiento

    Cuando el programa detiene la ejecución

    En una clase o estructura, Shared

    La primera vez que se llama al procedimiento en una instancia específica o en la propia clase o estructura

    Cuando el programa detiene la ejecución

    En una clase o estructura, no Shared

    La primera vez que se llama al procedimiento en una instancia específica

    Cuando la instancia se libera para la recolección de elementos no utilizados

Solución de problemas

  • Orden de ejecución. La instrucción Dim no es propiamente una instrucción ejecutable. Sin embargo, si inicializa una o más variables, las inicializaciones se tratan como instrucciones de asignación. Esto significa que el valor de una variable atraviesa los pasos siguientes:

    1. En la primera entrada en el elemento de código que declara la variable, Visual Basic la inicializa con el valor predeterminado para su tipo de datos.

    2. Cuando la ejecución llega a la instrucción Dim de la variable, Visual Basic la inicializa con el valor proporcionado en la instrucción Dim.

    3. Cada vez que la ejecución vuelve a la instrucción Dim de la variable, Visual Basic la establece una vez más en el valor proporcionado en la instrucción Dim.

    Esto tiene las implicaciones siguientes cuando se utiliza una instrucción Dim para inicializar una variable:

    • Si se utiliza la variable antes de ejecutar la instrucción Dim, su valor es el predeterminado para el tipo de datos, no el valor proporcionado en la instrucción Dim.

    • Si la ejecución nunca llega a la instrucción Dim, la variable nunca se inicializa con el valor proporcionado en la instrucción Dim.

    • Si se cambia el valor pero después se vuelve a la instrucción Dim, el valor modificado se reemplaza por el valor proporcionado en la instrucción Dim.

    Si se colocan todas las instrucciones Dim al inicio del área de código en la que aparecen, por ejemplo un módulo o procedimiento, el código las inicializa tal como se desea.

Ejemplo

En el ejemplo siguiente se declaran variables mediante la instrucción Dim con diversas opciones.

' The following statement declares and initializes a Long variable.
Dim startingAmount As Long = 500
' The following statement declares a variable that refers to a Button 
' object, creates a new Button object, and assigns it to the variable.
Dim switchButton As New System.Windows.Forms.Button
' The following statement declares a variable that can only be 
' accessed by code in the same class, structure, or module.
Private homeTelephone As String = ""
' The following statement declares a local variable that always retains
' its value, even after its procedure returns to the calling code.
Static totalSales As Double
' The following statement declares a variable that refers to an array.
Dim highTemperature(31) As Integer
' The following statement declares and initializes an array variable 
' that holds 4 Boolean check values.
Dim checkValues() As Boolean = {False, False, True, False}

Vea también

Tareas

Cómo: Declarar una variable de matriz

Cómo: Declarar una variable de matriz

Cómo: Declarar una instancia de un tipo anónimo

Cómo: Declarar un objeto usando un inicializador de objeto

Conceptos

Declaración de variable en Visual Basic

Inicializadores de objeto: Tipos con nombre y anónimos

Tipos anónimos

Inicializadores de objeto: Tipos con nombre y anónimos

Inferencia de tipo de variable local

Referencia

Instrucción Const (Visual Basic)

Instrucción ReDim (Visual Basic)

Instrucción Option Explicit (Visual Basic)