Ámbitos Local y Global
El alcance de una variable es la parte del código donde podemos acceder a esa variable. En C#, existe un alcance global y muchos posibles alcances locales.
Cuando creamos una variable fuera de cualquier método, se puede acceder a ella desde casi cualquier parte del programa, por lo tanto, se dice que tiene alcance global:
main.cs
using System; namespace ConsoleApp { internal class Program { static int myVariable = 10; // Variable with a Global Scope static void testMethod() { // Accessing `myVariable` inside `testMethod` Console.WriteLine($"testMethod: {myVariable}"); } static void Main(string[] args) { // Accessing `myVariable` inside `Main` method Console.WriteLine($"Main Function: {myVariable}"); testMethod(); } } }
Nota
Cuando declaras una variable fuera de cualquier método, es importante incluir la palabra clave
static
antes de su declaración.
En el ejemplo anterior, accedimos a la variable myVariable
tanto en el método Main
como en el método testMethod
. Sin embargo, esto no siempre es posible.
Una variable declarada dentro de un bloque de código solo es accesible dentro de ese bloque y de cualquier sub-bloque de código que contenga. Por ejemplo, una variable declarada dentro de un método solo es accesible directamente dentro de ese método. De manera similar, una variable declarada dentro de un bloque if
, else if
o else
solo es accesible dentro de ese bloque. A este tipo de variable se le dice que tiene un alcance local.
Tómate un momento para revisar el siguiente código e intenta comprender cómo funciona:
main.cs
using System; namespace ConsoleApp { class Program { static int variable_1 = 1; static void Main(string[] args) { int variable_2 = 2; if (true) { int variable_3 = 3; Console.WriteLine(variable_1); Console.WriteLine(variable_2); Console.WriteLine(variable_3); } Console.WriteLine(variable_1); Console.WriteLine(variable_2); Console.WriteLine(variable_3); // ERROR HERE Console.WriteLine(variable_4); // ERROR HERE // Note: A variable cannot be used before it's defined in the code } static void myMethod() { int variable_4 = 4; Console.WriteLine(variable_1); Console.WriteLine(variable_2); // ERROR HERE Console.WriteLine(variable_3); // ERROR HERE Console.WriteLine(variable_4); } } }
En el código anterior hay cuatro variables:
variable_1
- alcance global;variable_2
- alcance local, definida en el método Main;variable_3
- alcance local, definida en el bloqueif
;variable_4
- alcance local, definida en el métodomyMethod
.
Es posible que el programa anterior no compile en absoluto, pero demuestra dónde se puede acceder a ciertas variables y dónde no. El área del código donde se puede acceder a una variable se llama alcance de esa variable.
variable_1
es una variable global, por lo que es accesible casi en todas partes;variable_2
es accesible en todo el métodoMain
, incluyendo los sub-bloques como la condiciónif
;variable_3
es accesible solo dentro del bloqueif
;variable_4
es accesible solo dentro del bloquemyMethod
.
¡Gracias por tus comentarios!