ВУЗ:
Составители:
Рубрика:
61
} //for
Console.WriteLine("x= {0}; sum ={1}", x, sum);
} //ScopeVar
Отметим, что в теле метода встречаются имена полей, аргументов и
локальных переменных. Эти имена могут совпадать. Например, имя x имеет
поле класса и формальный аргумент метода. В языке C# разрешено иметь
локальные переменные с именами, совпадающими с именами полей класса, - в
нашем примере таким является имя y; однако, запрещено иметь локальные
переменные, имена которых совпадают с именами формальных аргументов.
Этот запрет распространяется не только на внешний уровень процедурного
блока, что вполне естественно, но и на все внутренние блоки.
В процедурный блок вложены два блока, порожденные оператором if. В
каждом из них объявлены переменные с одинаковыми именами u и v. Это
корректные объявления, поскольку время существования и области видимости
этих переменных не пересекаются. Итак, для невложенных блоков разрешено
объявление локальных переменных с одинаковыми именами. Отметим также,
что переменные u и v перестают существовать после выхода из блока, так что
операторы печати, расположенные внутри блока, работают корректно, а
оператор печати вне блока приводит к ошибке, – u и v здесь не видимы,
кончилось время их жизни. По этой причине оператор закомментирован.
Выражение, проверяемое в операторе if, зависит от значения поля name.
Значение поля глобально для метода и доступно всюду, если только не
перекрывается именем аргумента (как в случае с полем x) или локальной
переменной (как в случае с полем y).
Во многих языках программирования разрешено иметь локальные
статические переменные, у которых область видимости определяется блоком,
но время их жизни совпадает со временем жизни проекта. При каждом
повторном входе в блок такие переменные восстанавливают значение,
полученное при предыдущем выходе из блока. В языке C# статическими могут
быть только поля, но не локальные переменные. Незаконная попытка
объявления static переменной в процедуре ScopeVar закомментирована.
Попытка использовать имя переменной в точке, предшествующей ее
объявлению, также незаконна и закомментирована.
3.3.4. Глобальные переменные уровня процедуры
Поскольку процедурный блок имеет сложную структуру с вложенными
внутренними блоками, то и здесь возникает тема глобальных переменных.
Переменная, объявленная во внешнем блоке, рассматривается как глобальная
по отношению к внутренним блокам. Во всех языках программирования во
внутренних блоках разрешается объявлять переменные с именем, совпадающим
с именем глобальной переменной. Конфликт имен снимается за счет того, что
локальное внутреннее определение сильнее внешнего. Поэтому область
видимости внешней глобальной переменной сужается и не распространяется на
Страницы
- « первая
- ‹ предыдущая
- …
- 55
- 56
- 57
- 58
- 59
- …
- следующая ›
- последняя »
