Vous êtes sur la page 1sur 12

Instruccin Dim (Visual Basic)

Visual Studio 2013


Otras versiones

Este tema an no ha recibido ninguna valoracin - Valorar este tema

Declara y asigna espacio de almacenamiento para una o varias variables.

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

Trmino Definicin

attributelist Opcional. Vea la Lista de atributos.

Opcional. Puede ser una de las siguientes:

Public

Protected

accessmodifier Friend

Private

Protected Friend

Vea Niveles de acceso en Visual Basic.

Shared Opcional. Vea Shared.

Shadows Opcional. Vea Shadows.


Static Opcional. Vea Static.

ReadOnly Opcional. Vea ReadOnly.

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

Requerido. Lista de variables que se declara en esta instruccin.

variable [ , variable ... ]

Cada variable tiene la sintaxis y las partes siguientes:

variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype


[ With { [ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]

Parte Descripcin
variablename Requerido. Nombre de la variable. Vea Nombres de
variablelist elementos declarados (Visual Basic).
boundslist Opcional. Lista de lmites de cada dimensin de una variable de
matriz.
New Opcional. Crea una nueva instancia de la clase cuando se ejecuta la
instruccin Dim.
datatype Opcional. 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 despus de propertyname =. Expresin que se
evala y se asigna al nombre de propiedad.
initializer Opcional si no se especifica New. Expresin que se evala y se
asigna a la variable cuando se crea.
Comentarios

El compilador de Visual Basic utiliza la instruccin Dim para determinar el tipo de datos de
la variable y otra informacin, como por ejemplo qu cdigo puede obtener acceso a la
variable. En el ejemplo siguiente se declara una variable que contiene un valor Integer.

VB
Dim numberOfStudents As Integer
Puede especificar cualquier tipo de datos o el nombre de una enumeracin, estructura, clase
o interfaz.

VB
Dim finished As Boolean
Dim monitorBox As System.Windows.Forms.Form

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

VB
Dim bottomLabel As New System.Windows.Forms.Label

Puede declarar una variable en un procedimiento, bloque, clase, estructura o mdulo. No


puede declarar una variable en un archivo de cdigo fuente, espacio de nombres o interfaz.
Para obtener ms informacin, vea Contextos de declaracin y niveles de acceso
predeterminados (Visual Basic).

Una variable que se declara en el nivel de mdulo, fuera de cualquier procedimiento, es una
variable miembro o campo. Las variables miembro estn en mbito a lo largo de su clase,
estructura o mdulo. Una variable que se declara dentro de un procedimiento es una
variable local. Las variables locales slo estn en mbito dentro de su procedimiento o
bloque.

Los siguientes modificadores de acceso se utilizan para declarar variables fuera de un


procedimiento: PublicProtected, Friend, Protected Friend y Private. Para obtener ms
informacin, vea Niveles de acceso en Visual Basic.

La palabra clave Dim es opcional y se suele omitir si especifica cualquiera de los siguientes
modificadores: PublicProtected, Friend, Protected Friend, Private, Shared, Shadows, Static,
ReadOnly o WithEvents.

VB
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


declaracin para cada variable que utiliza. Para obtener ms informacin, vea Option
Explicit (Instruccin, Visual Basic).

Especifica un valor inicial


Puede asignar un valor a una variable cuando se crea. En un tipo de valor, un inicializador
se utiliza para proporcionar una expresin que se va a asignar a la variable. La expresin se
debe evaluar como una constante que se puede calcular en tiempo de compilacin.

VB
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 clusula As, la


inferencia de tipos se utiliza para inferir el tipo de datos del inicializador. En el ejemplo
siguiente, num1 y num2 estn fuertemente tipados como enteros. En la segunda
declaracin, la inferencia de tipos deduce el tipo del valor 3.

VB
' 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, mdulo o interfaz. Para obtener ms informacin
sobre la inferencia de tipos, vea Option Infer (instruccin) y Inferencia de tipo de variable
local (Visual Basic).

Para obtener informacin acerca de lo que sucede cuando un tipo de datos o inicializador
no se especifica, consulte Valores y tipos de datos predeterminados ms adelante en este
tema.

Puede utilizar un inicializador de objeto para declarar instancias de tipos annimos y con
nombre. El cdigo siguiente crea una instancia de una clase Student y utiliza a un
inicializador de objeto para inicializar las propiedades.

VB
Dim student1 As New Student With {.First = "Michael",
.Last = "Tucker"}

Para obtener ms informacin sobre los inicializadores de objeto, vea Cmo: Declarar un
objeto usando un inicializador de objeto (Visual Basic), Inicializadores de objeto: Tipos con
nombre y annimos (Visual Basic) y Tipos annimos (Visual Basic).

Declarar variables mltiples

Se pueden declarar varias variables en una instruccin de declaracin si se especifica el


nombre de variable de cada una, y se sigue cada nombre de matriz con parntesis. Las
variables mltiples se separan con comas.

VB
Dim lastTime, nextTime, allTimes() As Date

Si declara ms de una variable con una clusula As, no puede proporcionar un inicializador
para ese grupo de variables.

Se pueden especificar tipos de datos diferentes para variables diferentes utilizando una
clusula As independiente para cada variable declarada. Todas las variables toman el tipo
de datos especificado en la primera clusula As que se encuentre despus de su parte
variablename correspondiente.

VB
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 almacenar varios valores.
Para especificar que una variable contiene una matriz, incluya un parntesis
inmediatamente despus de variablename. Para obtener ms informacin sobre las matrices,
vea Matrices en Visual Basic.

Se puede especificar el lmite inferior y superior de cada dimensin de una matriz. Para
ello, incluya boundslist dentro de los parntesis. En cada dimensin, boundslist especifica
el lmite superior y, opcionalmente, el lmite inferior. El lmite inferior siempre es cero,
tanto si se especifica como si no. Cada ndice puede variar de cero hasta el valor de su
lmite superior.

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

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

La instruccin siguiente declara una matriz bidimensional de tipo Double. La matriz tiene 4
filas (3 + 1) de 6 columnas (5 + 1) cada una. Observe que el lmite superior representa el
valor ms alto posible del ndice, no la longitud de la dimensin. La longitud de la
dimensin es el lmite superior ms uno.

VB
Dim matrix2(3, 5) As Double

Una matriz puede tener de 1 a 32 dimensiones.

Todos los lmites de una declaracin de matriz se pueden dejar en blanco. En este caso, la
matriz tiene el nmero de dimensiones que especifica, pero se no se inicializa. Tiene el
valor Nothing hasta que se inicialicen por lo menos algunos de sus elementos. La
instruccin Dim debe especificar los lmites para todas las dimensiones o para ninguna de
ellas.

VB
' Declare an array with blank array bounds.
Dim messages() As String
' Initialize the array.
ReDim messages(4)

Si la matriz tiene ms de una dimensin, debe incluir comas entre los parntesis para
indicar el nmero de dimensiones.

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

Puede declarar una matriz de longitud cero declarando una de las dimensiones de la matriz
para que sea -1. Un variable que contiene una matriz de longitud cero no tiene el valor
Nothing. Ciertas funciones de Common Language Runtime requieren matrices de longitud
cero. Si se intenta acceder a dicha matriz, se produce una excepcin de tiempo de
ejecucin. Para obtener ms informacin, vea Matrices en Visual Basic.

Puede inicializar los valores de una matriz utilizando un literal de matriz. Para ello, encierre
los valores de inicializacin entre llaves ({}).

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

En las matrices multidimensionales, la inicializacin de cada dimensin est entre llaves en


la dimensin exterior. Los elementos se especifican en orden de importancia de filas.

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

Para obtener ms informacin sobre los literales de matriz, vea Matrices en Visual Basic.

Valores y tipos de datos predeterminados

La tabla siguiente describe los resultados de varias combinaciones de especificar el tipo de


datos y el inicializador en una instruccin Dim.

Tipo de datos Inicializador


Ejemplo Resultado
especificado? especificado?

No No Dim qty Si Option strict est desactivado (valor


predeterminado), la variable se establece en
Nothing.

Si Option Strict est activada, se produce un


error en tiempo de compilacin.

Si Option infer est activado (valor


predeterminado), la variable tiene el tipo de
datos de inicializadores. Vea Inferencia de
tipo de variable local (Visual Basic).

Dim qty = Si Option Infer y Option Strict estn


No Si
5 desactivadas, la variable toma el tipo de
datos de Object.

Si Option Infer est desactivada y Option


Strict est activada, se produce un error en
tiempo de compilacin.

La variable se inicializa con el valor


Dim qty As predeterminado para el tipo de datos.
Si No
Integer Consulte la tabla ms adelante en esta
seccin.

Si el tipo de datos del inicializador no es


Dim qty As
Si Si convertible al tipo de datos especificado, se
Integer = 5
produce un error en tiempo de compilacin.

Si especifica un tipo de datos pero no especifica un inicializador, Visual Basic inicializa la


variable con el valor predeterminado de su tipo de datos. En la tabla siguiente se muestran
los valores de inicializacin predeterminados.

Tipo de datos Valor predeterminado

Todos los tipos numricos (incluso Byte y


0
SByte)

Char Binario 0
Todas las referencias de tipo (incluidas Object,
Nothing
String y todas las matrices).

Boolean False

12:00 a.m. del 1 de enero del ao 1


Date
(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.

Vigencia de la variable local esttica

Una variable local Static tiene un perodo de duracin ms largo que el del procedimiento
en el que se declara. Los lmites de la duracin de la variable dependen de dnde se declare
el procedimiento y si es Shared.

Declaracin de
La variable se inicializa La variable deja de existir
procedimiento

La primera vez que se llama al Cuando el programa


En un mdulo
procedimiento detiene la ejecucin

La primera vez que se llama al


En una clase o
procedimiento en una instancia Cuando el programa
estructura, el
especfica o en la propia clase o detiene la ejecucin
procedimiento es Shared
estructura

En una clase o
La primera vez que se llama al Cuando la instancia se
estructura, el
procedimiento en una instancia libera para la recoleccin
procedimiento no es
especfica de elementos no utilizados
Shared

Atributos y modificadores
Slo se pueden aplicar atributos a las variables miembro, no a las variables locales. Un
atributo proporciona informacin a los metadatos del ensamblado, que no son significativos
para el almacenamiento temporal como las variables locales.

En el nivel de mdulo, 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.

Puede especificar qu cdigo puede tener acceso a una variable, suministrando un


accessmodifier. Las variables miembro de clase y mdulo (fuera de cualquier
procedimiento) tienen como valor predeterminado el acceso privado y las variables
miembro de estructura tienen como valor predeterminado el acceso pblico. Puede ajustar
sus niveles de acceso con los modificadores de acceso. No puede utilizar modificadores de
acceso en variables locales (dentro de un procedimiento).

Solo se 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 concreto, no Object. No se puede declarar una matriz con WithEvents. Para
obtener ms informacin sobre los eventos, vea Eventos (Visual Basic).

Nota

El cdigo externo a una clase, estructura o mdulo debe calificar el nombre de una variable
miembro con el nombre de esa clase, estructura o mdulo. El cdigo externo a 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 dispone de recursos


administrados sin ninguna codificacin adicional en la particin. Sin embargo, puede forzar
la eliminacin de un recurso administrado en lugar de esperar el recolector de elementos no
utilizados.

Si una clase consume un recurso determinado valioso y suficiente (como una conexin de
base de datos o un identificador de archivos), puede que no desee esperar hasta la siguiente
recoleccin de elementos no utilizados para limpiar una instancia de clase que ya no se
utiliza. Una clase puede implementar la interfaz IDisposable para proporcionar una manera
de liberar recursos antes de una recoleccin de elementos no utilizados. Una clase que
implementa expone de esa interfaz un mtodo Dispose que se puede llamar para obligar a
los recursos valiosos que se producirn liberar inmediatamente.

La instruccin Using automatiza el proceso de adquirir un recurso, de ejecutar un conjunto


de instrucciones, y despus de eliminar de recursos. Sin embargo, el recurso debe
implementar la interfaz IDisposable . Para obtener ms informacin, vea Using
(Instruccin, Visual Basic).

Ejemplo

En el ejemplo siguiente se declaran variables mediante la instruccin Dim con diversas


opciones.

VB
' Declare and initialize a Long variable.
Dim startingAmount As Long = 500

' Declare a variable that refers to a Button object,


' create a Button object, and assign the Button object
' to the variable.
Dim switchButton As New System.Windows.Forms.Button

' 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}

El ejemplo siguiente muestra los nmeros primos entre 1 y 30. El mbito de las variables
locales se describe en comentarios de cdigo.

VB
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

En el siguiente ejemplo, se declara la variable speedValue en el nivel de clase. La palabra


clave Private se utiliza para declarar la variable. La variable es accesible a travs del
cualquier procedimiento de la clase Car .

VB
' 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

VB
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

Vous aimerez peut-être aussi