Область видимости локальных переменных

В C# локальным переменным могут присваиваться только те имена, которые позволяют однозначно идентифицировать их в текущей области видимости. Если имя имеет несколько значений в этой области и не существует способа устранить неоднозначность, внутреннее объявление имени считается ошибочным, и его необходимо изменить. Рассмотрим следующий пример:

using System;

class MyObject

{

public MyObject(int x, int y)

{

this.x = x;

this.y = y;

}

int x;

int y;

}

В конструкторе имя x относится к параметру с именем x, поскольку имена параметров обладают более высоким приоритетом, чем имена переменных класса. Чтобы обратиться к переменной с именем x, следует указать префикс this., который является признаком переменной экземпляра.

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

В следующей ситуации однозначная идентификация имен обеих переменных невозможна, поэтому внутреннее объявление является ошибочным:

// Ошибка

using System;

class MyObject

{

public void Process()

{

int x = 12;

for (int y = 1; y < 10; y++)

{

// Невозможно сослаться не внешнюю переменную x.

int x = 14;

Console.WriteLine("x = {0}", x);

}

}

}

Поскольку внутреннее объявление x скрывает внешнее объявление, оно недопустимо.

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

Предлагаю ознакомиться с аналогичными статьями: