Область видимости переменной (её ещё называют контекстом переменной) — это фрагмент кода, в пределах которого будет доступна данная переменная. Область видимости в C# определяются следующими правилами:
Рассмотрим несколько примеров:
- Поле или переменная — член класса находится в области видимости до тех пор, пока в этой области находится содержащий это поле класс;
- Локальная переменная находится в области видимости до тех пор, пока закрывающая фигурная скобка не укажет конец блока операторов или метода, в котором она объявлена;
- Локальная переменная, объявленная в операторах цикла for, while или подобных им, видима в пределах тела цикла.
Рассмотрим несколько примеров:
for (int i = 0; i < 6; i++)
{
Console.Write(" {0}", i);
} // здесь заканчивается область видимости i
int k = 6 * i; // оператор не будет выполнен
После закрывающей скобки цикла for переменная i больше не будет "видна", следовательно, последний оператор не будет выполнен. Рассмотрим еще один пример:
public static int Main()
{
int n = 15;
for (int i = 0; i < 5; i++)
{
int n = 10; // ошибка
Console.WriteLine(n + i);
}
return 0;
}
Переменная n, определённая перед началом цикла for, будет находиться в области видимости до тех пор, пока не завершится метод Main(). Вторая переменная n якобы объявлена в контексте цикла, но он является вложенным в контекст метода Main(), поэтому компилятор не может различить эти две переменные и не допустит объявления второй переменной с именем n.
В некоторых случаях два идентификатора с одинаковыми именами и одинаковой областью видимости можно различить, при этом компилятор допустит объявление второй переменной.
Язык C# делает различие между переменными, объявленными на уровне поля и переменными, объявленные в методах (локальными переменными). В качестве примера рассмотрим следующий код:
В некоторых случаях два идентификатора с одинаковыми именами и одинаковой областью видимости можно различить, при этом компилятор допустит объявление второй переменной.
Язык C# делает различие между переменными, объявленными на уровне поля и переменными, объявленные в методах (локальными переменными). В качестве примера рассмотрим следующий код:
using System;
namespace ConsoleApplication
{
class Program
{
static string name = "Max";
public static void Main()
{
string name = "Bob";
Console.WriteLine(name);
return;
}
}
}
Когда вы запустите этот код, вы увидите строку "Bob". Приоритет у локальных переменных выше, чем у членов класса.