Compartir a través de


Tiempo de vida en Visual Basic

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.

Consulte también