![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Red Wind |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 280 Регистрация: 25.6.2004 Где: Минск Репутация: нет Всего: 2 |
Скажите, можно ли какими-нибудь правдами или неправдами переопределить метод в классе не создавая класс наследник? То есть есть нейкий класс с определёнными методами. Можно ли заменить метод данного класса моим кодом. Или на худой конец, выполнить мой код вместе с кодом метода при вызове этого метода. Извиняюсь за тавтологию
|
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
Боюсь , что нет
-------------------- Жизнь - печальная штука. |
|||
|
||||
| Red Wind |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 280 Регистрация: 25.6.2004 Где: Минск Репутация: нет Всего: 2 |
Хочеться написать тузлу которая будет трассировать код и заносить вызываемые методы в лог.
|
|||
|
||||
| 0000 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.7.2006 Где: Нижний Новгород Репутация: 2 Всего: 5 |
Можно!!!!
Шаблоны Проектирования знаешь?? используй Visitor и все получится |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
0000, а можно поподробнее. А то я даже представления не имею, что такое Visitor.
-------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
0000, в данном случае Visitor не подойдет, так как МЕНЯТЬ ОБЪЕКТ НЕЛЬЗЯ СОВСЕМ, а для Посетителя в посещаемом объекте должен быть метод с помощью которого он (посетитель) может начать работу с объектом
Вообще, посетители нужны чтобы не захламлять класс кучей операций. Например коллекция может объявить интерфейс для посещения, а разные посетители сортировать его слева направо и справа налево, возводить каждый элемент в определенную степень. Можно даже найти min и max элементы (только вот не помню можно ли в лассическом паттерне Посетитель забрирать нек значения из отработавшего посетителя). По теме вопроса: Red Wind, без наличия у класса интерфейса для перехвата вызова методов определить момент вызова метода из .net нельзя. ИМХО, если бы можно было, то у класса System.Reflection.MethodInfo были бы события типа Calling и Called
|
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
ivashkanet, спасибо.
-------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| 0000 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.7.2006 Где: Нижний Новгород Репутация: 2 Всего: 5 |
Если ему вообще класс никак менять нельзя, то тут я не специалист...а фактически для принятия визитора требуется лишь один метод... и да, согласен..не совсем переопределение получится, но во всяком случае доступ к базовому он иметь будет и сможет изменить его поведение |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
А тут никто не специалист Пробежался по паттернам --- наиболее подходит паттерн Наблюдатель (ждать чего-то там), а Посетитель нужен для выполнения операций над объектом. P.S. Наблюдатели уже встроены в языки .Net --- это всем известые... события и их обработчики |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
А что за паттерны вообще?
|
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
||||
|
||||
| Red Wind |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 280 Регистрация: 25.6.2004 Где: Минск Репутация: нет Всего: 2 |
Всем спасибо! Не думал, что тема вызовет такой резонанс
Хотя, можно написать класс обёртку. Но это не совсем то что надо Это сообщение отредактировал(а) Red Wind - 5.2.2007, 16:43 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Можно в порядке эксперимента копнуть в сторону контекстов, но это опять-таки повторю, в порядке эксперимента. Ещё ссылка по теме:
http://wiki.castleproject.org/index.php/DynamicProxy:Usage -------------------- ![]() |
|||
|
||||
| sekiro |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 14.4.2006 Репутация: нет Всего: нет |
http://msdn.microsoft.com/msdnmag/issues/0...ETProfilingAPI/
То что надо для реализации Вашей бредовой идеи |
|||
|
||||
| Gelis |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 26.10.2006 Где: Брест Репутация: 2 Всего: 4 |
||||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Несмотря на то, что тема вроде бы закрыта, позволю себе обратить внимание автора вопроса на возможную технологию решения поставленной задачи : ICorProfilerCallback/ICorProfilerCallback2 API. Ссылку на статью про неё уже упомянул sekiro, вот ещё одна. В первой из статей предлагается способ вставки MSIL-кода в начало и/или конец тела вызываемого метода, во второй примером служит программа-счётчик вызовов методов.
В двух словах, ICorProfilerCallback - интерфейс, позволяющий общаться с .NET-профилером, который в цепочке исполнения расположен как бы между средами CLR и Just-In-Time. С его помощью Вы можете, например, зарегестрироваться на получение callback -а о вызове некоторого метода внутри отдельно исполняющегося приложения, и перед тем, как код метода будет транслирован из CLR в Native и исполнен, делать с ним всё, что угодно, в частности, полностью подменить MSIL-код. Сначала потребуется научиться переключать .NET со стандартного профилера на собственный. Для этого нужно переключить переменные средЫ - во второй статье это делается в отдельном процессе, имхо, весьма элегатно. Затем, собственно, сымплементить интерфес ICorProfilerCallback в соответствии с потребностями. В общем, способ - не очень простой, но, если есть время, можно разобраться. Да, и он действительно используется для трассировки .NET приложений. Это сообщение отредактировал(а) marcusmae - 9.2.2007, 20:55 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |