Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > .NET для новичков > Указатели на функции(делегаты) - смысл? |
Автор: Gunslinger 25.8.2010, 12:49 |
Похоже я не программист - смотрю мсдн и не могу понять их смысл. Сама оболочка вроде понятна - чтобы было видно, к какому участку памяти, зачем обращаемся и что получаем. А сам смыл указателя непонятен. Нельзя в качестве параметра передать метод. Наверное, техническая причина, но зачем передавать сам метод, когда можно передать объект, его содержащий, а затем уже его вызвать? В с++ указатели на методы еще понять могу: нужно обратиться к функции в dll, которая висит в памяти. |
Автор: mrbrooks 25.8.2010, 13:59 | ||||
интересно - а каким ты образом реализуешь события на такой архитектуре? ![]() ничего ацкого в делегатах нет. как ты уже и говорил - делегаты это просто указатели на функции( только типобезопасные), т.е. это как callback функции в С++.
ха! посмотри тот же STL. Да там все алгоритмы реализованы с предикатами. А это и есть ни что иное, как указатели на функции. Так что по аналогии с С++ все симметрично + безопасность + дополнительный функционал объекта папы-делегата (см. док) Добавлено через 2 минуты и 6 секунд в общем твоя проблема не в делегатах - а в смысле функций обратного вызова - как таковых ![]() |
Автор: Gunslinger 25.8.2010, 18:12 | ||
Почитал вики с гуглом. Сформулировал вопрос: причина введения в язык указателей на функции (как их называют "обратного вызова") -- технические или архитектурные? Из-за специфики железа (связанные со стеком или еще чем) или из-за плюшек с той же событийной модели? Читаю и не могу выделить основную причину. |
Автор: ДобренькийПапаша 25.8.2010, 19:48 |
Сейчас основная причина - архитектурная. Событийная модель издатель-подписчик это комильфо! ИМХО ![]() |
Автор: mrbrooks 26.8.2010, 07:46 |
да да. |
Автор: Gunslinger 30.8.2010, 10:20 | ||||
Мсдн, интуит, гугл, книги.. Щас каша в голове. Архитектурно мой мозг имеет такая схема: 1. Объект-отправитель - класс с event-полями, которые на самом деле не поля, а классы. 2. Объект-получатель - класс, где есть метод(ы) для активации по событию. Связь. Где что пишут, даже не знаю, что правильно. Варианты, какие прочитал: 1. В объект-получатель передать ссылку на объект-отправитель, вызвать его event-поле и присвоить метод-обработчик. 2.
Либо это "обложка" для программиста и на самом деле компилятор "развернет" его по варианту 1. Т.е. в нечто вроде этого:
либо есть несколько способов подписаться на событие. |
Автор: KelTron 30.8.2010, 10:42 |
Возьми Троелсена и почитай главу про делегаты и события, там всё очень хорошо разъясняется. Твои вопросы отпадут сами собой.. |