![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
ajunta |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 20.4.2007 Репутация: нет Всего: нет |
Доброго времени суток!
Объйсните, пожалуйста, следующую ситуацию. Имеется код:
У него в цикле объйвлена перменная i, предположим хочу обратиться к ней после цикла:
это приводит к ошибке:
Далее рассуждаю так, что раз переменной в этой точке не существует, то ее можно там создать:
Однако это приводит к другой ошибке:
Собственно не понятно, какова же область видимости и .. существования что ли.. переменной, которая объявлена указанным образом. Это сообщение отредактировал(а) ajunta - 14.7.2008, 08:33 |
||||||||||
|
|||||||||||
mihryak |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
синтаксически можно сделать так
i будет рано 10 после цикла но не принято использовать итератор цикла for после его завершения, лучше переделай цикл в while или do-while пс. компилятор delphi, например, в режиме оптимизации мог обратить цикл так, что после выхода i будет равно -1, т.е. в этом языке значение итератора после цикла вообще недетерминировано |
|||
|
||||
kemiisto |
|
||||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 4 Всего: 160 |
Переменная-счетчик цикла, объявленная таким образом:
доступна только в теле цикла. Попытка обратиться вне тела приводить к ошибке. А если попытаться объявить еще раз переменную с тем же именем, то ктмпилятор ругается, что в дочерней области видимости уже есть такая переменная. Объявите её до цикла:
Это сообщение отредактировал(а) kemiisto - 14.7.2008, 09:11 -------------------- |
||||
|
|||||
amarenkov |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 21.2.2008 Где: Воронеж Репутация: нет Всего: нет |
Тут просто надо различать область существования переменной и область ее "смысловой" видимости. Существует i, в вашем случае, только внутри цикла. Но предупредительный компилятор не дает вам создать такую же переменную после цикла, чтобы вы же не запутались в смысле этой переменной
![]() |
|||
|
||||
ajunta |
|
||||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 20.4.2007 Репутация: нет Всего: нет |
Ну про то, что ее можно объявить перед циклом это понятно.
Ах вот зачем это сделано... Хотя использовать ее второй раз, но опять в цикле - можно:
видимо логика разработчиков состояла в том, что бы строго выделить переменные "из циклов". |
||||
|
|||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Была уже такая тема: http://forum.vingrad.ru/forum/topic-146649.html#st_0_view_0
|
|||
|
||||
ajunta |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 20.4.2007 Репутация: нет Всего: нет |
Спасибо!
|
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
ajunta, C# Language Specification
8.5.1 Local variable declarations (http://msdn.microsoft.com/en-us/library/aa664742(VS.71).aspx): The scope of a local variable declared in a local-variable-declaration is the block in which the declaration occurs. It is an error to refer to a local variable in a textual position that precedes the local-variable-declarator of the local variable. Т.е. даже если переменная объявлена где-то в конце блока, область видимости ее - весь блок. Просто компилятор не дает тебе ее исползовать до текстового объявления. Это сообщение отредактировал(а) PashaPash - 15.7.2008, 09:32 |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |