En Visual Basic, el ámbito de las variables se determina por el lugar de su declaración: dentro de un procedimiento (variable local), a nivel de clase/módulo (variable de clase o de módulo), o como global (en un archivo separado).
Dim dentro de un procedimiento — la variable es accesible solo en ese procedimiento.Dim a nivel de clase o módulo — accesible en todos los procedimientos de la clase/módulo.Public, Private, Friend — establece restricciones de acceso desde otras clases/módulos.Ejemplo:
Module Module1 Dim moduleVar As Integer = 5 Sub Main() Dim localVar As Integer = 10 Console.WriteLine(moduleVar) ' Accesible Console.WriteLine(localVar) ' Accesible End Sub Sub OtherSub() Console.WriteLine(moduleVar) ' Accesible Console.WriteLine(localVar) ' ¡Error! End Sub End Module
¿Qué ámbito tiene una variable declarada con la palabra clave
Staticdentro de un procedimiento?
Respuesta:
Una variable declarada con la palabra clave Static dentro de un procedimiento sigue siendo accesible solo dentro de ese procedimiento, sin embargo, su valor se conserva entre las llamadas al procedimiento.
Ejemplo:
Sub Counter() Static count As Integer count = count + 1 Console.WriteLine(count) End Sub ' Cada llamada a Counter incrementa count
Historia
En el proyecto se declaró una variable bandera Dim x As Boolean dentro de un bucle For, esperando que se "reinicie" en cada nueva iteración (como en otros lenguajes). Pero después de salir del bucle, la variable permaneció accesible, provocando un comportamiento impredecible después de la segunda ejecución del procedimiento.
Historia
Uno de los programadores declaró una variable pública en un módulo, y fue sobrescrita accidentalmente por otro módulo con el mismo nombre, lo que ocasionó errores críticos en varias partes del programa. Esto complicó la depuración y nadie pudo entender la causa.
Historia
Un estudiante declaró una variable Static para acumular una suma en un subprograma, pensando que se "limpiaría" en cada llamada. El resultado — al volver a llamar, la suma aumentaba, produciendo un resultado erróneo.