В 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# для удобства чтения и сопровождения программного кода. Если бы оно отсутствовало, во вложенной области видимости было бы трудно определить, какая версия переменной используется — и даже просто узнать о существовании нескольких версий
0 коммент.:
Отправить комментарий