Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El ámbito de un elemento declarado es el conjunto de todo el código que puede hacer referencia a él sin habilitar su nombre ni ponerlo a disposición a través de una instrucción Imports (Tipo y espacio de nombres de .NET). Un elemento puede tener ámbito en uno de los siguientes niveles:
Nivel | Descripción |
---|---|
Ámbito de bloque | Disponible solo en el bloque de código en el que se declara |
Ámbito del procedimiento | Disponible para todo el código dentro del procedimiento en el que se declara |
Ámbito del módulo | Disponible para todo el código dentro del módulo, la clase o la estructura en los que se declara |
Ámbito de espacio de nombres | Disponible para todo el código del espacio de nombres en el que se declara |
Estos niveles de progreso de ámbito desde el más estrecho (bloque) hasta el más ancho (espacio de nombres), donde el ámbito más estrecho significa el conjunto más pequeño de código que puede hacer referencia al elemento sin cualificación. Para obtener más información, vea "Niveles de ámbito" en esta página.
Especificar el ámbito y definir variables
El ámbito de un elemento se especifica al declararlo. El ámbito puede depender de los siguientes factores:
Región (bloque, procedimiento, módulo, clase o estructura) en la que se declara el elemento.
Espacio de nombres que contiene la declaración del elemento
Nivel de acceso que declara para el elemento
Use cuidado al definir variables con el mismo nombre pero con un ámbito diferente, ya que hacerlo puede provocar resultados inesperados. Para obtener más información, vea Referencias a elementos declarados.
Niveles de ámbito
Un elemento de programación está disponible en toda la región en la que se declara. Todo el código de la misma región puede hacer referencia al elemento sin calificar su nombre.
Ámbito de bloque
Un bloque es un conjunto de instrucciones incluidas en las instrucciones de declaración de inicio y finalización, como las siguientes:
Do
yLoop
For
[Each
] yNext
If
yEnd If
Select
yEnd Select
SyncLock
yEnd SyncLock
Try
yEnd Try
While
yEnd While
With
yEnd With
Si declara una variable dentro de un bloque, solo puede usarla dentro de ese bloque. En el ejemplo siguiente, el ámbito de la variable de entero cube
es el bloque entre If
y End If
, y ya no se puede hacer referencia a cube
cuando la ejecución sale fuera del bloque.
If n < 1291 Then
Dim cube As Integer
cube = n ^ 3
End If
Nota:
Incluso si el ámbito de una variable está limitado a un bloque, su duración sigue siendo la del procedimiento completo. Si escribe el bloque más de una vez durante el procedimiento, cada variable de bloque conserva su valor anterior. Para evitar resultados inesperados en tal caso, es aconsejable inicializar variables de bloque al principio del bloque.
Ámbito del procedimiento
Un elemento declarado dentro de un procedimiento no está disponible fuera de ese procedimiento. Solo el procedimiento que contiene la declaración puede usarlo. Las variables en este nivel también se conocen como variables locales. Las declara con la instrucción Dim, con o sin la palabra clave Static.
El ámbito de procedimiento y el de bloque están estrechamente relacionados. Si declara una variable dentro de un procedimiento pero fuera de cualquier bloque dentro de ese procedimiento, puede pensar en la variable como tener ámbito de bloque, donde el bloque es todo el procedimiento.
Nota:
Todos los elementos locales, incluso si son Static
variables, son privados para el procedimiento en el que aparecen. No se puede declarar ningún elemento mediante la palabra clave Public dentro de un procedimiento.
Ámbito del módulo
Para mayor comodidad, el nivel de módulo de un solo término se aplica igualmente a módulos, clases y estructuras. Puede declarar elementos en este nivel colocando la instrucción de declaración fuera de cualquier procedimiento o bloque, pero dentro del módulo, la clase o la estructura.
Al realizar una declaración en el nivel de módulo, el nivel de acceso que elija determina el ámbito. El espacio de nombres que contiene el módulo, la clase o la estructura también afecta al ámbito.
Los elementos para los que declara el nivel de acceso privado están disponibles para todos los procedimientos de ese módulo, pero no para ningún código de un módulo diferente. La Dim
instrucción en el nivel de módulo tiene Private
como valor predeterminado si no usa ninguna palabra clave de nivel de acceso. Sin embargo, puede hacer que el ámbito y el nivel de acceso sean más obvios mediante la palabra clave Private
de la instrucción Dim
.
En el ejemplo siguiente, todos los procedimientos definidos en el módulo pueden hacer referencia a la variable strMsg
de cadena . Cuando se llama al segundo procedimiento, muestra el contenido de la variable strMsg
de cadena en un cuadro de diálogo.
' Put the following declaration at module level (not in any procedure).
Private strMsg As String
' Put the following Sub procedure in the same module.
Sub initializePrivateVariable()
strMsg = "This variable cannot be used outside this module."
End Sub
' Put the following Sub procedure in the same module.
Sub usePrivateVariable()
MsgBox(strMsg)
End Sub
Ámbito de espacio de nombres
Si declara un elemento en el nivel de módulo mediante la palabra clave Friend o Public , estará disponible para todos los procedimientos del espacio de nombres en el que se declara el elemento. Con la siguiente modificación del ejemplo anterior, la variable de cadena strMsg
podrá ser referenciada por código en cualquier parte del espacio de nombres de su declaración.
' Include this declaration at module level (not inside any procedure).
Public strMsg As String
El ámbito del espacio de nombres incluye espacios de nombres anidados. Un elemento disponible desde dentro de un espacio de nombres también está disponible desde dentro de cualquier espacio de nombres anidado dentro de ese espacio de nombres.
Si el proyecto no contiene ninguna instrucción de espacio de nombres, todo lo que hay en el proyecto está en el mismo espacio de nombres. En este caso, el ámbito del espacio de nombres se puede considerar como ámbito de proyecto. Public
Los elementos de un módulo, una clase o una estructura también están disponibles para cualquier proyecto que haga referencia a su proyecto.
Elección del ámbito
Al declarar una variable, debe tener en cuenta los siguientes puntos al elegir su ámbito.
Ventajas de las variables locales
Las variables locales son una buena opción para cualquier tipo de cálculo temporal, por los siguientes motivos:
Prevención de conflictos de nombres. Los nombres de variables locales no son susceptibles a conflictos. Por ejemplo, puede crear varios procedimientos diferentes que contengan una variable denominada
intTemp
. Siempre que cadaintTemp
uno se declare como una variable local, cada procedimiento reconoce solo su propia versión deintTemp
. Cualquier procedimiento puede modificar el valor en su entorno localintTemp
sin afectar a variablesintTemp
en otros procedimientos.Consumo de memoria. Las variables locales consumen memoria solo mientras se ejecuta su procedimiento. Su memoria se libera cuando el procedimiento vuelve al código de llamada. Por el contrario, las variables compartidas y estáticas consumen recursos de memoria hasta que la aplicación deja de ejecutarse, así que úselas solo cuando sea necesario. Las variables de instancia consumen memoria mientras su instancia sigue existiendo, lo que hace que sean menos eficaces que las variables locales, pero potencialmente más eficientes que
Shared
las variables oStatic
.
Minimizar el ámbito
En general, al declarar cualquier variable o constante, es buena práctica de programación hacer que el ámbito sea lo más restringido posible (siendo el ámbito de bloque el más restringido). Esto ayuda a conservar la memoria y minimiza las posibilidades de que el código haga referencia erróneamente a la variable incorrecta. Del mismo modo, debe declarar una variable para que sea Estática solo cuando sea necesario conservar su valor entre las llamadas a procedimiento.