Escopos Local e Global
O escopo de uma variável é a parte do código onde podemos acessar essa variável. Em C#, existe um escopo global e vários possíveis escopos locais.
Quando criamos uma variável fora de qualquer método, ela pode ser acessada de praticamente qualquer lugar do programa, portanto, diz-se que ela possui escopo global:
main.cs
1234567891011121314151617181920using 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
Ao declarar uma variável fora de qualquer método, é importante incluir a palavra-chave
static
antes de sua declaração.
No exemplo acima, acessamos a variável myVariable
tanto no método Main
quanto no testMethod
. No entanto, isso nem sempre é possível.
Uma variável declarada dentro de um bloco de código só é acessível dentro desse bloco e de quaisquer sub-blocos de código que ele contenha. Por exemplo, uma variável declarada dentro de um método só é acessível diretamente dentro desse método. Da mesma forma, uma variável declarada dentro de um bloco if
, else if
ou else
só é acessível dentro desse bloco. Tal variável possui escopo local.
Reserve um momento para analisar o código a seguir e tente entender como ele funciona:
main.cs
123456789101112131415161718192021222324252627282930313233using 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); } } }
No código acima, existem quatro variáveis:
variable_1
- escopo global;variable_2
- escopo local, definida no método Main;variable_3
- escopo local, definida no blocoif
;variable_4
- escopo local, definida no métodomyMethod
.
O programa acima pode não compilar, mas demonstra onde certas variáveis podem ser acessadas e onde não podem. A área do código onde uma variável pode ser acessada é chamada de escopo dessa variável.
variable_1
é uma variável global, portanto é acessível quase em todo lugar;variable_2
é acessível em todo o métodoMain
, incluindo sub-blocos como a condiçãoif
;variable_3
é acessível apenas dentro do blocoif
;variable_4
é acessível apenas dentro do bloco do métodomyMethod
.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 1.59
Escopos Local e Global
Deslize para mostrar o menu
O escopo de uma variável é a parte do código onde podemos acessar essa variável. Em C#, existe um escopo global e vários possíveis escopos locais.
Quando criamos uma variável fora de qualquer método, ela pode ser acessada de praticamente qualquer lugar do programa, portanto, diz-se que ela possui escopo global:
main.cs
1234567891011121314151617181920using 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
Ao declarar uma variável fora de qualquer método, é importante incluir a palavra-chave
static
antes de sua declaração.
No exemplo acima, acessamos a variável myVariable
tanto no método Main
quanto no testMethod
. No entanto, isso nem sempre é possível.
Uma variável declarada dentro de um bloco de código só é acessível dentro desse bloco e de quaisquer sub-blocos de código que ele contenha. Por exemplo, uma variável declarada dentro de um método só é acessível diretamente dentro desse método. Da mesma forma, uma variável declarada dentro de um bloco if
, else if
ou else
só é acessível dentro desse bloco. Tal variável possui escopo local.
Reserve um momento para analisar o código a seguir e tente entender como ele funciona:
main.cs
123456789101112131415161718192021222324252627282930313233using 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); } } }
No código acima, existem quatro variáveis:
variable_1
- escopo global;variable_2
- escopo local, definida no método Main;variable_3
- escopo local, definida no blocoif
;variable_4
- escopo local, definida no métodomyMethod
.
O programa acima pode não compilar, mas demonstra onde certas variáveis podem ser acessadas e onde não podem. A área do código onde uma variável pode ser acessada é chamada de escopo dessa variável.
variable_1
é uma variável global, portanto é acessível quase em todo lugar;variable_2
é acessível em todo o métodoMain
, incluindo sub-blocos como a condiçãoif
;variable_3
é acessível apenas dentro do blocoif
;variable_4
é acessível apenas dentro do bloco do métodomyMethod
.
Obrigado pelo seu feedback!