Conteúdo do Curso
Noções Básicas de C#
Noções Básicas de C#
Escopos Locais e Globais
O escopo de uma variável é a parte do código onde podemos acessar essa variável. Em C#, existe um escopo global e muitos escopos locais possíveis.
Quando criamos uma variável fora de qualquer método, ela pode ser acessada de quase qualquer lugar no programa, portanto, diz-se que ela tem escopo global. Por exemplo:
main
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
Ao criar uma variável fora de qualquer método, precisamos adicionar a palavra-chave
static
antes da declaração.
No código acima, conseguimos acessar a variável myVariable
tanto no método Main
quanto no testMethod
. No entanto, isso nem sempre é o caso.
Uma variável declarada dentro de um bloco de código está disponível apenas dentro desse bloco de código, e nos sub-blocos de código, se houver. Por exemplo, uma variável declarada dentro de um método será diretamente acessível apenas dentro desse método. Da mesma forma, uma variável declarada dentro de um bloco if
, else if
ou else
será acessível apenas dentro desse bloco. Diz-se que tal variável tem um escopo local.
É um bom exercício de leitura de código olhar o seguinte código e tentar entendê-lo:
main
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); } } }
No código acima, existem quatro variáveis:
variable_1
- Escopo Global;variable_2
- Escopo Local, definido no método Main;variable_3
- Escopo Local, definido no blocoif
;variable_4
- Escopo Local, definido 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, então é acessível quase em todos os lugares;variable_2
é acessível em todo o métodoMain
, incluindo os sub-blocos como a condiçãoif
;variable_3
é acessível apenas dentro do blocoif
;variable_4
é acessível apenas dentro do blocomyMethod
;
Obrigado pelo seu feedback!