En Visual Basic, un módulo (Module) permite declarar variables y procedimientos que son accesibles en todo el proyecto (si se utilizan los modificadores de acceso correctos). Las variables declaradas dentro del módulo, fuera de los procedimientos, se convierten en sus campos; su ámbito de visibilidad depende del modificador (Private/Friend/Public), y su tiempo de vida es durante toda la duración de la aplicación.
Características clave de las variables de módulo:
A diferencia de las variables globales (por ejemplo, en otros lenguajes o en el antiguo VB6), las variables de módulo no son accesibles fuera del ensamblado a menos que se declaren explícitamente como Public.
Ejemplo:
Module Globals Public Counter As Integer Sub Increment() Counter += 1 End Sub End Module ' Acceso a Counter desde cualquier lugar del mismo proyecto
Pregunta: ¿Qué acceso tendrá la variable de módulo si se declara con el modificador Private? ¿Está disponible en otros módulos del mismo proyecto?
Respuesta: No, una variable con el modificador Private solo está disponible dentro de ese módulo; no se puede acceder a ella desde otros módulos o clases.
Module Data Private x As Integer End Module ' El módulo Other no verá x
Historia
Durante el desarrollo de un servicio de cálculo, todos los valores intermedios se guardaban en variables de módulo. Uno de los desarrolladores asumió que los datos "se reiniciarían" entre llamadas, pero el estado se mantenía (Application Scope). Esto llevó a errores al usar el servicio simultáneamente por varios usuarios. Solución: utilizar variables locales y evitar mantener el estado en módulos si se requiere seguridad de hilo.
Historia
En un proyecto de múltiples archivos, se declaró una variable de módulo con el modificador
Friend(en lugar dePublic). Se esperaba que fuera accesible en todos los proyectos relacionados de la solución, pero resultó ser visible solo dentro de un ensamblado, lo que causó errores de acceso inesperados en la etapa de integración.
Historia
Después de optimizar el código, dejaron de funcionar los indicadores lógicos del proceso, ya que al constructor de la clase no se le pasaba el módulo donde se definía el indicador de registro estático. Como resultado, se utilizó una versión antigua del valor, lo que llevó a que el sistema trabajara con datos obsoletos, y el error fue investigado durante mucho tiempo debido a la complejidad de rastrear el punto de cambio del estado de la variable de módulo.