Упражнение. Блоки кода и область действия переменной
- 11 минут
Блок кода — это одна или несколько инструкций C#, определяющих путь выполнения. Операторы за пределами блока кода влияют на время выполнения, если и как часто выполняется этот блок кода. Границы блока кода обычно определяются волнистыми скобками. {}
Помимо их влияния на путь выполнения, блоки кода также могут повлиять на область ваших переменных. Примеры кода, которые вы просматриваете во время этого упражнения, помогут понять связь между блоками кода и областью переменной.
Блоки кода влияют на область действия объявления переменной
Область переменной ссылается на видимость переменной к другому коду в приложении. Переменная с локальной областью действия доступна только внутри блока кода, где она определена. При попытке обращения к переменной за пределами блока кода возникает ошибка компилятора.
Оставшаяся часть этого урока изучает связь между блоками кода и областью переменной.
Подготовка среды программирования
Этот модуль включает практические действия, которые помогут вам в процессе создания и выполнения демонстрационного кода. Рекомендуется выполнить эти действия с помощью Visual Studio Code в качестве среды разработки. Использование Visual Studio Code для этих действий поможет вам стать более удобным написанием и выполнением кода в среде разработчика, которая используется специалистами по всему миру.
Откройте Visual Studio Code.
Для открытия Visual Studio Code можно использовать меню Windows (или эквивалентный ресурс для другой ОС).
В меню "Файл Visual Studio Code" выберите "Открыть папку".
В диалоговом окне "Открыть папку " перейдите в папку "Рабочий стол Windows".
Если у вас есть другое расположение папки, в котором хранятся проекты кода, вместо этого можно использовать это расположение папки. Для этого обучения важно иметь расположение, которое легко найти и помнить.
В диалоговом окне "Открыть папку " выберите "Выбрать папку".
Если появится диалоговое окно безопасности с запросом доверия авторам, нажмите кнопку "Да".
На панели меню Visual Studio Code выберите в меню Терминал пункт Новый терминал.
Обратите внимание, что в командной строке на панели терминала отображается путь к папке текущей папки. Рассмотрим пример.
C:\Users\someuser\Desktop>Примечание.
Если вы работаете на собственном компьютере, а не в песочнице или размещенной среде, и вы выполнили другие модули Microsoft Learn в этой серии C#, возможно, вы уже создали папку проекта для примеров кода. Если это так, можно пропустить следующий шаг, который используется для создания консольного приложения в папке TestProject.
В командной строке терминала, чтобы создать консольное приложение в указанной папке, введите следующую строку:
dotnet new console -o ./CsharpProjects/TestProjectЭта команда .NET CLI использует шаблон программы .NET для создания проекта консольного приложения C# в указанном расположении папки. Команда создает папки CsharpProjects и TestProject для вас
.csprojи использует TestProject в качестве имени файла.Если отображается сообщение о том, что файлы уже существуют, перейдите к следующим шагам. Вы повторно используете существующие файлы проекта.
В представлении EXPLORER разверните папку CsharpProjects .
Вы увидите папку TestProject и два файла, файл программы C# с именем Program.cs и файл проекта C# с именем TestProject.csproj.
В меню "Файл Visual Studio Code" выберите "Открыть папку".
В диалоговом окне "Открыть папку " выберите папку CsharpProjects и выберите "Выбрать папку".
В представлении EXPLORER разверните папку TestProject и выберите Program.cs.
Удалите существующие строки кода.
Вы будете использовать этот консольный проект C# для создания, сборки и запуска примеров кода во время этого модуля.
Закройте панель терминала.
Создание переменной внутри блока кода
Сначала рассмотрим ситуацию, когда переменная инициализирована внутри блока кода.
Убедитесь, что на панели редактора открыт и Program.cs visual Studio Code.
Примечание.
Program.cs должно быть пустым. Если это не так, выберите и удалите все строки кода.
Введите следующий код в редактор Visual Studio Code:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); }В меню "Файл Visual Studio Code" нажмите кнопку "Сохранить".
Перед созданием или выполнением кода необходимо сохранить файл Program.cs.
На панели обозревателя откройте терминал в папке TestProject, щелкните правой кнопкой мыши TestProject и выберите "Открыть в интегрированном терминале".
Откроется панель терминала. Терминал должен содержать командную строку, показывающую, что терминал открыт для расположения папки TestProject.
В терминале, чтобы запустить код, введите dotnet run и нажмите Enter.
Примечание.
Если появится сообщение "Не удалось найти проект для запуска", убедитесь, что в командной строке терминала отображается ожидаемое расположение папки TestProject. Например:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Должен появиться следующий результат:
Inside the code block: 10
Это ожидаемые выходные данные. Но что делать, если вы хотите получить доступ к переменной value за пределами if блока кода инструкции?
Попытка получить доступ к переменной за пределами блока кода, в которой она объявлена
В редакторе Visual Studio Code создайте новую строку кода под блоком кода инструкции
if.В созданной пустой строке кода добавьте следующую строку кода:
Console.WriteLine($"Outside the code block: {value}");Убедитесь, что обновленный код выглядит следующим образом:
bool flag = true; if (flag) { int value = 10; Console.WriteLine($"Inside the code block: {value}"); } Console.WriteLine($"Outside the code block: {value}");Сохраните файл кода и используйте Visual Studio Code для запуска кода.
Введите
dotnet runиз командной строки терминала, чтобы запустить код.Обратите внимание, что при попытке запустить приложение возникает ошибка компиляции:
Program.cs(7,46): error CS0103: The name 'value' does not exist in the current context
Часть Program.cs(7,46) сообщения сообщает, что ошибка связана со строкой 7 в файле Program.cs столбца 46.
Эта ошибка возникает, так как переменная, объявленная внутри блока кода, доступна только (можно увидеть только в этом блоке кода). Так как переменная не может быть доступна за пределами блока кода, в котором она объявлена, value невозможно получить доступ из строки 7 кода.
Переменная, объявленная в блоке кода метода, называется локальной переменной. При просмотре статей, обсуждающих область видимости переменных, вы можете встретить термин локальная переменная.
Перемещение объявления переменной над блоком кода
Чтобы получить доступ к переменной внутри и за пределами блока кода, необходимо объявить переменную до (выше) блока кода, чтобы код за пределами блока кода "увидеть" переменную.
Обновите код в редакторе Visual Studio Code следующим образом:
bool flag = true; int value; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Чтобы просмотреть обновления, сделайте минуту.
Обратите внимание, что
valueтеперь объявлен (но не инициализирован) за пределамиifблока кода.Используйте Visual Studio Code для сохранения обновлений и запуска кода.
Обратите внимание, что по-прежнему возникает ошибка компиляции.
На этот раз при попытке запустить приложение вы получите следующую ошибку компиляции:
Program.cs(6,49): error CS0165: Use of unassigned local variable 'value'Ошибка связана со строкой 6 внутри блока кода, так как
valueнеинициализирована (не назначено значение). Если строкаvalue = 10;кода была расположена над блокомifкода инструкции, приложение будет правильно компилироваться и все будет хорошо. Тем не менее, так какvalueон не был инициализирован, он не может быть доступ в блоке кода.Убедитесь, что переменные инициализированы перед попыткой доступа к ним устранить эту проблему.
Инициализация переменной в рамках объявления переменной
Чтобы инициализировать
valueв рамках объявления переменной, обновите код следующим образом:bool flag = true; int value = 0; if (flag) { Console.WriteLine($"Inside the code block: {value}"); } value = 10; Console.WriteLine($"Outside the code block: {value}");Этот код устраняет ошибку компиляции без знака локальной переменной путем инициализации
valueв рамках объявления переменной.Используйте Visual Studio Code для сохранения и запуска кода.
Обратите внимание, что теперь при запуске приложения вы увидите следующие выходные данные:
Inside the code block: 0 Outside the code block: 10
Изучение интерпретации кода компилятора
Чтобы избежать ошибок среды выполнения, компилятор C# анализирует код в редакторе Visual Studio Code и во время процесса сборки. Однако компилятор может не всегда интерпретировать код так же, как и вы.
Рассмотрим следующие два примера кода, которые, как представляется, служат одной и той же цели:
// Code sample 1
bool flag = true;
int value;
if (flag)
{
value = 10;
Console.WriteLine($"Inside the code block: {value}");
}
Console.WriteLine($"Outside the code block: {value}");
// Code sample 2
int value;
if (true)
{
value = 10;
Console.WriteLine($"Inside the code block: {value}");
}
Console.WriteLine($"Outside the code block: {value}");
Вы можете понять, что эти два примера всегда должны создавать один и тот же результат, но компилятор C# интерпретирует эти два примера кода по-разному.
В первом примере кода компилятор интерпретирует flag как логическую переменную, которая может быть назначена значением либо truefalse. Компилятор завершает, что flag если есть false, value он не будет инициализирован при выполнении второго Console.WriteLine() . По сути, компилятор считает, что возможны следующие два пути выполнения кода:
// path when flag = true
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
И
// path when flag = false
int value;
Console.WriteLine($"Outside the code block: {value}");
Так как компилятор считает второй путь возможностью (для примера кода 1), он создает сообщение об ошибке во время процесса сборки. Кроме того, редактор кода в Visual Studio Code предупреждает вас об этой проблеме, отображая красную линию value под (под блоком кода).
Во втором примере кода соответствие заключает, что содержимое if блока кода инструкции всегда будет выполняться (true всегда true). Компилятор не создает ошибку сборки, так как он интерпретирует второй пример кода, чтобы иметь один путь выполнения следующим образом:
int value;
value = 10;
Console.WriteLine($"Inside the code block: {value}");
Console.WriteLine($"Outside the code block: {value}");
Кратко
Ниже приведено несколько важных аспектов, которые необходимо учитывать при работе с блоками кода.
- При объявлении переменной внутри блока кода ее видимость является локальной для этого блока кода, и эта переменная не может быть доступна за пределами блока кода.
- Чтобы убедиться, что переменная отображается как внутри, так и вне блока кода, необходимо объявить переменную до блока кода (вне и выше блока кода).
- Убедитесь, что переменные инициализированы до попытки доступа к ним кода (для всех потенциальных путей выполнения кода).