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.
Declara y asigna espacio de almacenamiento para una o varias variables.
Sintaxis
[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] variablelist
Partes
attributelistOpcional. Consulte Lista de atributos.
accessmodifierOpcional. Puede ser uno de los siguientes:
Consulte Niveles de acceso en Visual Basic.
SharedOpcional. Vea Shared.
ShadowsOpcional. Vea Sombras.
StaticOpcional. Consulte Estático.
ReadOnlyOpcional. Consulte ReadOnly.
WithEventsOpcional. Especifica que se trata de variables de objeto que hacen referencia a instancias de una clase que pueden generar eventos. Consulte WithEvents.
variablelistObligatorio. Lista de variables que se declaran en esta instrucción.
variable [ , variable ... ]Cada
variabletiene la sintaxis y las partes siguientes:variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With{[ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]Parte Descripción variablenameObligatorio. Nombre de la variable. Vea Nombres de elementos declarados. boundslistOpcional. Lista de límites de cada dimensión de una variable de matriz. NewOpcional. Crea una nueva instancia de la clase cuando se ejecuta la Diminstrucción .datatypeOpcional. Tipo de datos de la variable. WithOpcional. Presenta la lista de inicializadores de objetos. propertynameOpcional. El nombre de una propiedad de la clase en la que se va a crear una instancia de . propinitializerObligatorio después propertynamede =. Expresión que se evalúa y se asigna al nombre de propiedad.initializerOpcional si Newno se especifica. Expresión que se evalúa y se asigna a la variable cuando se crea.
Observaciones
El compilador de Visual Basic usa la Dim instrucción para determinar el tipo de datos de la variable y otra información, como qué código puede tener acceso a la variable. En el ejemplo siguiente se declara una variable para contener un Integer valor.
Dim numberOfStudents As Integer
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
Para un tipo de referencia, use la New palabra clave para crear una nueva instancia de la clase o estructura especificada por el tipo de datos. Si usa New, no usa una expresión de inicializador. En su lugar, se proporcionan argumentos, si son necesarios, al constructor de la clase desde la que se va a crear la variable.
Dim bottomLabel As New System.Windows.Forms.Label
Puede declarar una variable en un procedimiento, bloque, clase, estructura o módulo. No se puede declarar una variable en un archivo de origen, un espacio de nombres ni una interfaz. Para obtener más información, vea Contextos de declaración y Niveles de acceso predeterminados.
Una variable que se declara en el nivel de módulo, fuera de cualquier procedimiento, es una variable ocampo miembro. Las variables miembro están en el ámbito a lo largo de su clase, estructura o módulo. Una variable que se declara en el nivel de procedimiento es una variable local. Las variables locales solo están en el ámbito dentro de su procedimiento o bloque.
Los siguientes modificadores de acceso se usan para declarar variables fuera de un procedimiento: Public, Protected, Friend, Protected Friendy Private. Para obtener más información, vea Niveles de acceso en Visual Basic.
La Dim palabra clave es opcional y normalmente se omite si especifica cualquiera de los siguientes modificadores: Public, Protected FriendFriendPrivateProtected, , Shared, Shadows, Static, o .WithEventsReadOnly
Public maximumAllowed As Double
Protected Friend currentUserName As String
Private salary As Decimal
Static runningTotal As Integer
Si Option Explicit está activado (valor predeterminado), el compilador requiere una declaración para cada variable que use. Para obtener más información, vea Option Explicit Statement.
Especificar un valor inicial
Puede asignar un valor a una variable cuando se crea. Para un tipo de valor, se usa un inicializador para proporcionar una expresión que se va a asignar a la variable. La expresión debe evaluarse como una constante que se puede calcular en tiempo de compilación.
Dim quantity As Integer = 10
Dim message As String = "Just started"
Si se especifica un inicializador y no se especifica un tipo de datos en una As cláusula , la inferencia de tipos se usa para deducir el tipo de datos del inicializador. En el siguiente ejemplo, tanto num1 como num2 están fuertemente tipados como enteros. En la segunda declaración, escriba inferencias que deducen el tipo del valor 3.
' Use explicit typing.
Dim num1 As Integer = 3
' Use local type inference.
Dim num2 = 3
La inferencia de tipos se aplica en el nivel de procedimiento. No se aplica fuera de un procedimiento en una clase, estructura, módulo o interfaz. Para obtener más información sobre la inferencia de tipos, vea Option Infer Statement y Local Type Inference.
Para obtener información sobre lo que sucede cuando no se especifica un tipo de datos o un inicializador, consulte Tipos de datos predeterminados y valores más adelante en este tema.
Puede usar un inicializador de objeto para declarar instancias de tipos con nombre y anónimos. El código siguiente crea una instancia de una Student clase y usa un inicializador de objeto para inicializar las propiedades.
Dim student1 As New Student With {.First = "Michael",
.Last = "Tucker"}
Para obtener más información sobre los inicializadores de objetos, vea How to: Declare an Object by Using an Object Initializers, Object Initializers: Named and Anonymous Types, and Anonymous Types.
Declaración de varias variables
Puede declarar varias variables en una instrucción de declaración, especificando el nombre de la variable para cada una y siguiendo cada nombre de matriz con paréntesis. Varias variables están separadas por comas.
Dim lastTime, nextTime, allTimes() As Date
Si declara más de una variable con una As cláusula , no puede proporcionar un inicializador para ese grupo de variables.
Puede especificar diferentes tipos de datos para variables diferentes mediante una cláusula independiente As para cada variable que declare. Cada variable toma el tipo de datos especificado en la primera As cláusula encontrada después de su variablename parte.
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
Matrices
Puede declarar una variable para contener una matriz, que puede contener varios valores. Para especificar que una variable contiene una matriz, siga inmediatamente variablename con paréntesis. Para obtener más información sobre las matrices, vea Matrices.
Puede especificar el límite inferior y superior de cada dimensión de una matriz. Para ello, incluya un boundslist elemento entre paréntesis. Para cada dimensión, boundslist especifica el límite superior y, opcionalmente, el límite inferior. El límite inferior siempre es cero, tanto si lo especifica como si no. Cada índice puede variar de cero a su valor de límite superior.
Las dos instrucciones siguientes son equivalentes. Cada instrucción declara una matriz de 21 Integer elementos. Al acceder a la matriz, el índice puede variar de 0 a 20.
Dim totals(20) As Integer
Dim totals(0 To 20) As Integer
La siguiente instrucción declara una matriz bidimensional de tipo Double. La matriz tiene 4 filas (3 + 1) de 6 columnas (5 + 1) cada una. Tenga en cuenta que un límite superior representa el valor más alto posible para el índice, no la longitud de la dimensión. La longitud de la dimensión es el límite superior más uno.
Dim matrix2(3, 5) As Double
Una matriz puede tener de 1 a 32 dimensiones.
Puede dejar todos los límites en blanco en una declaración de matriz. Si lo hace, la matriz tiene el número de dimensiones que especifique, pero no se inicializa. Tiene un valor de Nothing hasta que inicializa al menos algunos de sus elementos. La Dim instrucción debe especificar límites para todas las dimensiones o para ninguna dimensión.
' Declare an array with blank array bounds.
Dim messages() As String
' Initialize the array.
ReDim messages(4)
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
Puede declarar una matriz de longitud cero declarando una de las dimensiones de la matriz en -1. Una variable que contiene una matriz de longitud cero no tiene el valor Nothing. Algunas funciones de Common Language Runtime requieren matrices de longitud cero. Si intenta acceder a dicha matriz, se produce una excepción en tiempo de ejecución. Para más información, consulte Matrices.
Puede inicializar los valores de una matriz mediante un literal de matriz. Para ello, rodea los valores de inicialización con llaves ({}).
Dim longArray() As Long = {0, 1, 2, 3}
En el caso de las matrices multidimensionales, la inicialización de cada dimensión independiente se incluye entre llaves en la dimensión externa. Los elementos se especifican en orden principal de fila.
Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}}
Para obtener más información sobre los literales de matriz, vea Matrices.
Valores y tipos de datos predeterminados
En la tabla siguiente se describen los resultados de varias combinaciones de especificar el tipo de datos y el inicializador en una Dim instrucción .
| ¿Tipo de datos especificado? | ¿Se especificó el inicializador? | Ejemplo | Resultado |
|---|---|---|---|
| No | No | Dim qty |
Si Option Strict está desactivado (valor predeterminado), la variable se establece en Nothing.Si Option Strict está activado, se produce un error en tiempo de compilación. |
| No | Sí | Dim qty = 5 |
Si Option Infer está activado (valor predeterminado), la variable toma el tipo de datos del inicializador. Consulte Inferencia de tipos locales. Si Option Infer está desactivado y Option Strict está desactivado, la variable toma el tipo de datos de Object.Si Option Infer está desactivado y Option Strict está activado, se produce un error en tiempo de compilación. |
| Sí | No | Dim qty As Integer |
La variable se inicializa en el valor predeterminado del tipo de datos. Consulte la tabla más adelante en esta sección. |
| Sí | Sí | Dim qty As Integer = 5 |
Si el tipo de datos del inicializador no se puede convertir en el tipo de datos especificado, se produce un error en tiempo de compilación. |
Si especifica un tipo de datos pero no especifica un inicializador, Visual Basic inicializa la variable en el valor predeterminado para su tipo de datos. En la tabla siguiente se muestran los valores de inicialización predeterminados.
| Tipo de dato | Valor predeterminado |
|---|---|
Todos los tipos numéricos (incluidos Byte y SByte) |
0 |
Char |
Binario 0 |
Todos los tipos de referencia (incluidas Object, Stringy todas las matrices) |
Nothing |
Boolean |
False |
Date |
12:00 am del 1 de enero del año 1 (01/01/0001 12:00:00 AM) |
Cada elemento de una estructura se inicializa como si fuera una variable independiente. Si declara la longitud de una matriz pero no inicializa sus elementos, cada elemento se inicializa como si fuera una variable independiente.
Duración de la variable local estática
Una Static variable local tiene una duración mayor que la del procedimiento en el que se declara. Los límites de la duración de la variable dependen de dónde se declara el procedimiento y si es Shared.
| Declaración de procedimiento | Variable inicializada | La variable detiene la existente |
|---|---|---|
| En un módulo | La primera vez que se llama al procedimiento | Cuando el programa detiene la ejecución |
En una clase o estructura, el procedimiento es 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, el procedimiento no es Shared |
La primera vez que se llama al procedimiento en una instancia específica | Cuando la instancia se ejecuta para la recolección de elementos no utilizados (GC) |
Atributos y modificadores
Solo puede aplicar atributos a variables miembro, no a variables locales. Un atributo contribuye a la información a los metadatos del ensamblado, que no es significativo para el almacenamiento temporal, como variables locales.
En el nivel de módulo, no puede usar el Static modificador para declarar variables miembro. En el nivel de procedimiento, no puede usar Shared, Shadows, ReadOnly, WithEventsni ningún modificador de acceso para declarar variables locales.
Puede especificar qué código puede acceder a una variable proporcionando un accessmodifier. Las variables de 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. Puede ajustar sus niveles de acceso con los modificadores de acceso. No se pueden usar modificadores de acceso en variables locales (dentro de un procedimiento).
Solo puede especificar WithEvents en variables miembro, no en variables locales dentro de un procedimiento. Si especifica WithEvents, el tipo de datos de la variable debe ser un tipo de clase específico, no Object. No se puede declarar una matriz con WithEvents. Para obtener más información sobre los eventos, vea Eventos.
Nota:
El código fuera de 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 fuera de un procedimiento o bloque no puede hacer referencia a ninguna variable local dentro de ese procedimiento o bloque.
Liberar recursos administrados
El recolector de elementos no utilizados de .NET Framework elimina los recursos administrados sin ninguna codificación adicional por su parte. Sin embargo, puede forzar la eliminación de un recurso administrado en lugar de esperar al recolector de elementos no utilizados.
Si una clase se mantiene en un recurso especialmente valioso y escaso (como una conexión de base de datos o un identificador de archivo), es posible que no quiera esperar hasta que la siguiente recolección de elementos no utilizados limpie una instancia de clase que ya no esté en uso. Una clase puede implementar la IDisposable interfaz para proporcionar una manera de liberar recursos antes de una recolección de elementos no utilizados. Clase que implementa esa interfaz expone un Dispose método al que se puede llamar para forzar que los recursos valiosos se liberen inmediatamente.
La Using instrucción automatiza el proceso de adquisición de un recurso, la ejecución de un conjunto de instrucciones y la eliminación del recurso. Sin embargo, el recurso debe implementar la IDisposable interfaz . Para obtener más información, vea Using Statement.
Ejemplo 1
En el ejemplo siguiente se declaran variables mediante la Dim instrucción con varias opciones.
' Declare and initialize a Long variable.
Dim startingAmount As Long = 500
' Declare a local variable that always retains its value,
' even after its procedure returns to the calling code.
Static totalSales As Double
' Declare a variable that refers to an array.
Dim highTemperature(31) As Integer
' Declare and initialize an array variable that
' holds four Boolean check values.
Dim checkValues() As Boolean = {False, False, True, False}
Ejemplo 2
En el ejemplo siguiente se enumeran los números primos entre 1 y 30. El ámbito de las variables locales se describe en comentarios de código.
Public Sub ListPrimes()
' The sb variable can be accessed only
' within the ListPrimes procedure.
Dim sb As New System.Text.StringBuilder()
' The number variable can be accessed only
' within the For...Next block. A different
' variable with the same name could be declared
' outside of the For...Next block.
For number As Integer = 1 To 30
If CheckIfPrime(number) = True Then
sb.Append(number.ToString & " ")
End If
Next
Debug.WriteLine(sb.ToString)
' Output: 2 3 5 7 11 13 17 19 23 29
End Sub
Private Function CheckIfPrime(ByVal number As Integer) As Boolean
If number < 2 Then
Return False
Else
' The root and highCheck variables can be accessed
' only within the Else block. Different variables
' with the same names could be declared outside of
' the Else block.
Dim root As Double = Math.Sqrt(number)
Dim highCheck As Integer = Convert.ToInt32(Math.Truncate(root))
' The div variable can be accessed only within
' the For...Next block.
For div As Integer = 2 To highCheck
If number Mod div = 0 Then
Return False
End If
Next
Return True
End If
End Function
Ejemplo 3
En el ejemplo siguiente, la speedValue variable se declara en el nivel de clase. La Private palabra clave se usa para declarar la variable. Cualquier procedimiento de la clase puede acceder a la Car variable.
' Create a new instance of a Car.
Dim theCar As New Car()
theCar.Accelerate(30)
theCar.Accelerate(20)
theCar.Accelerate(-5)
Debug.WriteLine(theCar.Speed.ToString)
' Output: 45
Public Class Car
' The speedValue variable can be accessed by
' any procedure in the Car class.
Private speedValue As Integer = 0
Public ReadOnly Property Speed() As Integer
Get
Return speedValue
End Get
End Property
Public Sub Accelerate(ByVal speedIncrease As Integer)
speedValue += speedIncrease
End Sub
End Class
Consulte también
- Instrucción Const
- Instrucción ReDim
- Option Explicit (instrucción)
- Instrucción Option Infer
- Option Strict (instrucción)
- página Compilar, diseñador de proyectos (Visual Basic)
- Declaración de variables
- matrices de
- Inicializadores de objeto: tipos con nombre y anónimos
- Tipos anónimos
- Inicializadores de objeto: tipos con nombre y anónimos
- Procedimiento para declarar un objeto mediante un inicializador de objeto
- Inferencia de tipos locales