Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> доступ к локальным переменным 
V
    Опции темы
nmn
Дата 24.12.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



Существует возможность доступа к локальным переменным из анонимных методов:
Код

class test
{
delegate void asd();
static asd myDelegate;
static initDelegate()
{
int i=0;
myDelegate=delegate {Console.WriteLine(i++);};
}
static void main()
{
initDelegate();
myDelegate();
myDelegate();
}
}

это напечатает 
Код

0
1

каким образом делегат получает доступ к переменной i, когда она уже не существует? или она неявно объявляется статической?
PM Skype   Вверх
PashaPash
Дата 24.12.2008, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



nmn, этот механизм называется замыканием (closure), гугл выдает по этому слову кучу ссылок. На самом деле анонимный метод и переменная запихиваются во временный класс, и вызывающий код работает с этим классом. Т.е. переменная не статическая глобальная, но и не локальная для метода.


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0413 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.