Los módulos (Module) en Visual Basic se utilizan históricamente para almacenar procedimientos, funciones y variables accesibles en todo el proyecto sin crear explícitamente una instancia. Con la introducción de las clases, sus roles se superponen parcialmente, sin embargo, las diferencias significativas se mantienen.
Historia del tema:
En el Visual Basic clásico (VB6), los módulos eran la única forma de agrupar funciones comunes y variables globales. En VB.NET, los módulos todavía existen, pero con capacidades ampliadas de las clases.
Problema:
El desarrollador puede no entender la diferencia entre un módulo y una clase, lo que puede conducir a una elección errónea en el método de almacenamiento de lógica, duplicación accidental de código o comportamiento inesperado de las variables.
Solución:
La elección entre un módulo y una clase depende de los objetivos:
Ejemplo de código:
' Módulo Module MathUtils Public Function Add(x As Integer, y As Integer) As Integer Return x + y End Function End Module ' Uso Dim result = MathUtils.Add(5, 10)
Características clave:
Shared y están disponibles sin instancia.¿Si declaro una variable en un módulo como Public, será común para todos los formularios/clases de la aplicación?
Sí. Las variables Public en un módulo son esencialmente globales. Son accesibles desde cualquier código del proyecto, lo cual es conveniente, pero puede llevar a errores en condiciones de concurrencia o sobrescritura accidental de valores.
¿Se puede crear una instancia de un módulo con New?
No. Los módulos no se instancian. Toda su funcionalidad está disponible de manera estática.
¿Se puede heredar un módulo o declarar un módulo con modificadores de acceso Protected o Private?
No. Los módulos no son heredables y se declaran solo a nivel de espacio de nombres (namespace), no pueden ser anidados ni tener otros modificadores de acceso, excepto Public o Friend.
En el proyecto, todas las variables de estado del usuario se declaran como Public en un módulo. Con cualquier cambio en un valor en un formulario, se convierte instantáneamente en nuevo para todos los demás.
Ventajas:
Desventajas:
El módulo se utiliza solo para almacenar utilidades auxiliares (por ejemplo, funciones de conversión), mientras que el estado del usuario se almacena en clases con encapsulación.
Ventajas:
Desventajas: