Область видимости

Эти управляющие конструкции организуют так называемые блоки кода, которые могут собираться в иерархии. Не вдаваясь сейчас в подробности синтаксиса, приведу пример. Если вы немного знакомы с английским, вам сразу станет понятней.

Фрагмент 1.2

int money = 1000;
if(money >= 1000) 
{
    
}

Блочный оператор if создал блок с помощью фигурных скобок. Внутри этого блока своя область видимости, которая расширяет родительскую область. Т.е область заданную, например, методом или другим блочным оператором, в который вложен этот if.

Внутри этого if доступно всё, что доступно из родительской области плюс то, что определено внутри этого блока, но не в дочерних блоках.  

Фрагмент 1.3

int money = 1000;
if(money >= 1000) 
{
    int age = 18;
    Console.WriteLine($“{age} {money}”);
}

Т.е внутри if доступна и переменная age и переменная money. Давайте попробуем определить ещё один блок кода.

Фрагмент 1.4

int money = 1000;
if(money >= 1000) 
{
    int age = 18;
    if(age > 16)
    {
        bool access = true;
    }
    Console.WriteLine($“{age} {money} {access}”);
}

В такой программе содержится ошибка. Дело в том, что внутри if который проверяет, что age больше 16, создаётся переменная, недоступная вне этой области. Т.е за пределами его фигурных скобок, переменная access перестаёт существовать. Это имеет смысл хотя бы потому, что если возраст пользователя меньше 16, то мы бы и не зашли в этот блок, что создало бы опасную ситуацию.

Если хочется изменять переменную во вложенных блоках, то её определение можно поднять выше, оставив изменение внутри.

Фрагмент 1.5

int money = 1000;
if(money >= 1000) 
{
    int age = 18;
    bool access = false;
    if(age > 16)
    {
        access = true;
    }
    Console.WriteLine($“{age} {money} {access}”);
}

Если вы нашли ошибку, пожалуйста выделите её и нажмите Ctrl+Enter.


Leave a Reply

Your email address will not be published. Required fields are marked *