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.
La duración de un elemento declarado es el período de tiempo durante el cual está disponible para su uso. Las variables son los únicos elementos que tienen duración. Para ello, el compilador trata los parámetros de los procedimientos y los valores devueltos por las funciones como casos especiales de variables. La duración de una variable representa el período de tiempo durante el que puede contener un valor. Su valor puede cambiar durante su vigencia, pero siempre contiene algún valor.
Diferentes vidas
Normalmente, una variable miembro (declarada en el nivel de módulo, fuera de cualquier procedimiento) tiene la misma duración que el elemento en el que se declara. Existe una variable no compartida declarada en una clase o estructura como una copia independiente para cada instancia de la clase o estructura en la que se declara. Cada variable de este tipo tiene la misma duración que su instancia. Sin embargo, una Shared
variable solo tiene una duración única, que dura todo el tiempo que se ejecuta la aplicación.
Solo existe una variable local (declarada dentro de un procedimiento) mientras se ejecuta el procedimiento en el que se declara. Esto también se aplica a los parámetros de ese procedimiento y a cualquier devolución de función. Sin embargo, si ese procedimiento llama a otros procedimientos, las variables locales conservan sus valores mientras se ejecutan los procedimientos llamados.
Comienzo de la vigencia
La duración de una variable local comienza cuando el control entra en el procedimiento en el que se declara. Cada variable local se inicializa en el valor predeterminado de su tipo de datos en cuanto el procedimiento comienza a ejecutarse. Cuando el procedimiento encuentra una Dim
instrucción que especifica valores iniciales, establece esas variables en esos valores, incluso si el código ya había asignado otros valores a ellos.
Cada miembro de una variable de estructura se inicializa como si fuera una variable independiente. De forma similar, cada elemento de una variable de matriz se inicializa individualmente.
Las variables declaradas dentro de un bloque dentro de un procedimiento (como un For
bucle) se inicializan en la entrada al procedimiento. Estas inicializaciones surten efecto independientemente de que el código ejecute o no el bloque.
Fin de la vigencia
Cuando finaliza un procedimiento, los valores de sus variables locales no se conservan y Visual Basic reclama su memoria. La próxima vez que llame al procedimiento, todas sus variables locales se crean y se reinicializan de nuevo.
Cuando finaliza una instancia de una clase o estructura, sus variables no compartidas pierden su memoria y sus valores. Cada nueva instancia de la clase o estructura crea y reinicializa sus variables no compartidas. Sin embargo, Shared
las variables se conservan hasta que la aplicación deja de ejecutarse.
Extensión de la vida útil
Si declara una variable local con la Static
palabra clave , su duración es mayor que el tiempo de ejecución de su procedimiento. En la tabla siguiente se muestra cómo la declaración de procedimiento determina cuánto tiempo existe una Static
variable.
Ubicación y compartición de procedimientos | La vigencia de las variables estáticas comienza | Finaliza la duración de las variables estáticas |
---|---|---|
En un módulo (compartido de forma predeterminada) | La primera vez que se llama al procedimiento | Cuando la aplicación deja de ejecutarse |
En una clase, Shared (el procedimiento no es un miembro de la instancia) |
La primera vez que se llama al procedimiento en una instancia específica o en el propio nombre de la clase o estructura | Cuando la aplicación deja de ejecutarse |
En una instancia de una clase, no Shared (el procedimiento es un miembro de la instancia) |
La primera vez que se llama al procedimiento en la instancia específica | Cuando la instancia se ejecuta para la recolección de elementos no utilizados (GC) |
Variables estáticas del mismo nombre
Puede declarar variables estáticas con el mismo nombre en más de un procedimiento. Si lo hace, el compilador de Visual Basic considera que cada variable de este tipo es un elemento independiente. La inicialización de una de estas variables no afecta a los valores de los demás. Lo mismo se aplica si define un procedimiento con un conjunto de sobrecargas y declara una variable estática con el mismo nombre en cada sobrecarga.
Elementos de contención para variables estáticas
Puede declarar una variable local estática dentro de una clase, es decir, dentro de un procedimiento de esa clase. Sin embargo, no se puede declarar una variable local estática dentro de una estructura, ya sea como un miembro de estructura o como una variable local de un procedimiento dentro de esa estructura.
Ejemplo
Descripción
En el ejemplo siguiente se declara una variable con la palabra clave Static . (Tenga en cuenta que no necesita la Dim
palabra clave cuando la declaración Dim utiliza un modificador como Static
).
Código
Function runningTotal(ByVal num As Integer) As Integer
Static applesSold As Integer
applesSold = applesSold + num
Return applesSold
End Function
Comentarios
En el ejemplo anterior, la variable applesSold
continúa existiendo después de que el procedimiento runningTotal
vuelva al código que realiza la llamada. La próxima vez que se llame a runningTotal
, applesSold
conserva su valor calculado anteriormente.
Si applesSold
se hubiera declarado sin usar Static
, los valores acumulados anteriores no se conservarían entre las llamadas a runningTotal
.
runningTotal
fue llamado la próxima vez, applesSold
habría sido recreado e inicializado en 0, y runningTotal
simplemente habría devuelto el mismo valor con el que fue llamado.
Compilación del código
Puede inicializar el valor de una variable local estática como parte de su declaración. Si declara una matriz como Static
, puede inicializar su rango (número de dimensiones), la longitud de cada dimensión y los valores de los elementos individuales.
Seguridad
En el ejemplo anterior, puede generar la misma duración declarando applesSold
en el nivel de módulo. Sin embargo, si ha cambiado el ámbito de una variable de esta manera, el procedimiento ya no tendría acceso exclusivo a ella. Dado que otros procedimientos podrían tener acceso applesSold
y cambiar su valor, el total en ejecución podría ser poco confiable y el código podría ser más difícil de mantener.