En Visual Basic, las variables dentro de los procedimientos generalmente pierden su valor después de completar la llamada. La palabra clave Static permite que una variable mantenga su valor entre las llamadas al procedimiento.
Historia del tema:
En el clásico Visual Basic (VB6) y VB.NET, Static se utilizaba a menudo para crear contadores y banderas sin utilizar campos de clase o módulo.
Problema:
El desarrollador puede usar variables locales normales, contando con su "persistencia", mientras que se reinician en cada llamada. Por otro lado, el lugar elegido (cuerpo del procedimiento o bloque de código) para la variable estática puede ser erróneo.
Solución:
Declara la variable con Static dentro del procedimiento. Se inicializa una vez en la primera llamada al procedimiento y luego mantiene su valor entre llamadas.
Ejemplo de código:
Sub CountCalls() Static counter As Integer = 0 counter += 1 Console.WriteLine($"Llamada número: {counter}") End Sub ' Las llamadas generarán diferentes valores CountCalls() ' 1 CountCalls() ' 2 CountCalls() ' 3
Características clave:
Static existe solo en el ámbito del procedimiento, pero mantiene su valor entre llamadas.¿Cuál es la diferencia entre Static en un procedimiento y un campo de clase con el modificador Shared?
Una variable Static actúa solo en este procedimiento: cada instancia del método obtiene su propia variable estática independiente. Un campo Shared de la clase es uno solo para toda la clase.
¿Se puede declarar una variable Static en un bloque For o If?
No, las variables Static se declaran solo en el nivel superior del procedimiento, no se permite dentro de bloques anidados (For, If).
¿Qué sucederá al llamar a un procedimiento con Static desde múltiples hilos?
En la versión VB.NET, el ámbito de las variables Static está vinculado a cada hilo, lo que puede provocar condiciones de carrera y valores inesperados en llamadas multihilo.
En un procedimiento de cálculo de la reacción del usuario al pulsar una tecla, se utiliza Static para almacenar el tiempo de activación, pero no se tiene en cuenta la pulsación simultánea por varios usuarios (por ejemplo, una aplicación web o una ventana multihilo).
Pros:
Contras:
Static se utiliza para almacenar un contador interno de llamadas de un método utilitario, llamado solo de manera sincrónica desde un solo hilo.
Pros:
Contras: