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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли вешать событие на вызов любого метода? 
V
    Опции темы
Bogdan1024
Дата 5.11.2008, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 5
Всего: 13



Вопрос теоретический, поэтому не закидывайте меня кодом и ссылками, а просто объясните вкратцэ smile
Можно ли каким-нибудь образом повесить на любой метод событие, которое будет вызываться когда этот метод будет вызываться?


--------------------
user posted image
PM MAIL   Вверх
Partizan
Дата 5.11.2008, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Bogdan1024, 

имеется ввиду возможность установить генерируемое событие для всех методов из одного места?
или возможность генерирования события в любом гипотетически возможном методе?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
mr.DUDA
Дата 5.11.2008, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Такой возможности нет. Вот почему:

Генерировать событие до или после тела метода? Куда девать аргументы метода, передавать в событие или нет, создавать фрейм стека или нет (до или после)? Отменить вызов метода, если событие захочет этого? Как обрабатывать исключения в коде обработчика события?

P.S. по сабжу было что-то по поводу контекстов, но было это давно и для .NET 1.0/1.1, уже не вспомню  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
Bogdan1024
Дата 5.11.2008, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 5
Всего: 13



Цитата(Partizan @  5.11.2008,  19:33 Найти цитируемый пост)
имеется ввиду возможность установить генерируемое событие для всех методов из одного места?

Это было бы неплохо smile
Цитата(Partizan @  5.11.2008,  19:33 Найти цитируемый пост)
или возможность генерирования события в любом гипотетически возможном методе? 

Это интересует smile
Цитата(mr.DUDA @  5.11.2008,  19:40 Найти цитируемый пост)
Генерировать событие до или после тела метода? Куда девать аргументы метода, передавать в событие или нет, создавать фрейм стека или нет (до или после)? Отменить вызов метода, если событие захочет этого? Как обрабатывать исключения в коде обработчика события?

Я не знаю куда, может микрософтовцы знают smile Может нужно задифайнить одну константу и фрэймворк начнёт работать по-другому smile 
Ведь мы же можем ставить брэйкпойнты где угодно в приложениях, даже в самом бинарнике (экзешнике). Может быть фрэймворк имеет методы, которые позволяют делать что-то подобное: дико контролировать исполнение приложения? 
Я не работал с MSIL-отладчиком. 
Просто мне кажется что когда что-то доходит до брэйкпойнта, то генерируется событие.

Добавлено через 6 минут и 49 секунд
Не, я понимаю что со стеком ничего не происходит на брэйкпойнтах. Но всё же... smile 
Можно ли просто следить за выполнением программы и создавать события при вызове некоторых методов в другой?


--------------------
user posted image
PM MAIL   Вверх
mr.DUDA
Дата 5.11.2008, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Bogdan1024 @  5.11.2008,  20:52 Найти цитируемый пост)
Ведь мы же можем ставить брэйкпойнты где угодно в приложениях, даже в самом бинарнике (экзешнике). Может быть фрэймворк имеет методы, которые позволяют делать что-то подобное: дико контролировать исполнение приложения? 

Что позволено дебаггеру, то не позволено.... хмм... простому смертному  smile 

У дебаггера есть PDB-файл с полной инфой об адресе каждого метода, вот он и рулит, и вообще дебаггер CLR не написан на c#/.net, а только подвид обычного сишного студийного дебаггера с его набором инструментов. У программера есть прямые руки и возможность воткнуть в начало нужного метода вызов статического метода а-ля MyEvent.Raise("message") и т.п.

Добавлено через 1 минуту и 33 секунды
Цитата(Bogdan1024 @  5.11.2008,  20:52 Найти цитируемый пост)
Не, я понимаю что со стеком ничего не происходит на брэйкпойнтах. Но всё же...  Можно ли просто следить за выполнением программы и создавать события при вызове некоторых методов в другой?

см. "прямые руки" и так далее  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
Bogdan1024
Дата 5.11.2008, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 5
Всего: 13



Всё ясно smile Когда врублюсь в MSIL по-лучше, тогда возможно вернусь к этой теме. А пока что считаю её закрытой smile Всем учасникам спасибо smile


--------------------
user posted image
PM MAIL   Вверх
Rififi
Дата 5.11.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 5
Всего: 36



Цитата(Bogdan1024 @  5.11.2008,  21:21 Найти цитируемый пост)
Можно ли каким-нибудь образом повесить на любой метод событие, которое будет вызываться когда этот метод будет вызываться? 

можно.
смотреть в сторону Aspect.NET и других AOP-библиотек
PM MAIL   Вверх
jorikdima
Дата 6.11.2008, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 18.1.2008
Где: Там, где Зенит

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



Цитата(Rififi @ 5.11.2008,  21:13)
Цитата(Bogdan1024 @  5.11.2008,  21:21 Найти цитируемый пост)
Можно ли каким-нибудь образом повесить на любой метод событие, которое будет вызываться когда этот метод будет вызываться? 

можно.
смотреть в сторону Aspect.NET и других AOP-библиотек

В Питере сделано  smile  smile  smile 
PM MAIL   Вверх
Jamon
Дата 7.11.2008, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Rififi @ 5.11.2008,  21:13)
Цитата(Bogdan1024 @  5.11.2008,  21:21 Найти цитируемый пост)
Можно ли каким-нибудь образом повесить на любой метод событие, которое будет вызываться когда этот метод будет вызываться? 

можно.
смотреть в сторону Aspect.NET и других AOP-библиотек

+1.
Если вкратце - то аспекты помогают по определенному принципу выбрать методы, при всех вызовах которых нужно что-то делать. Ну, например вызывать метод логирования инфы - чтобы не писать однотипные строчки в n методах, можно написать аспект, который выберет методы и runtime впихнет нужный код. 

для лучшего понимания конечно юзайте документацию, но я когда заинтересовался - мне почему то лучше всего помогла статья про аспекты в php smile  -  с моей т.зр. было явно лучше и понятней написано чем в статьях, опирающихся на c#/java либы, может конечно не те доки читал  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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