12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
|
|
1 | |
События в .NET - каковы их концепция и назначение?05.05.2014, 13:30. Показов 1269. Ответов 17
Метки нет (Все метки)
Я просто не могу понять концепцию событий и зачем они вообще нужны. С делегатом тут всё понятно, указатель на функцию - вещь нужная, можно асинхронные вызовы делать, вслепую функции вызвать ну и т.д. А вот зачем нужны события не понимаю, ведь всё тоже самое можно реализовать и передачей указателя на parent и потом изменять его состояние как захочется и где захочется. Подумал может это какая-то фича могопоточности, а тут нет, вызванная функция события, оказалась в том же потоке. Обратил внимания что очень многие фишки .NET реализованы на событиях - значит в них есть какой то смысле))). Объясните мне пожалуйста зачем они вообще нужны, и где их использование оправданно а где нет.
П.С. нужный мне функционал я могу реализовать и так и так, а вот как правильно не знаю
0
|
05.05.2014, 13:30 | |
Ответы с готовыми решениями:
17
Делегаты и события - каковы их суть и назначение Каковы суть и назначение ref и out Каковы суть и назначение #include <iomanip> Каковы суть и назначение Unit Tests |
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
|
|
05.05.2014, 13:41 | 2 |
2
|
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
|
|
05.05.2014, 13:48 [ТС] | 3 |
hepper, а какой в этом плюс? я заметил только минус, что код становится друднее читаемым. Если, ты в некой сущьности эмитируешь событие, то дальше фиг его знает что происходит? какие функции вызвались? где и кто их привязывал к событиям? непонятно
0
|
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
|
|
05.05.2014, 14:00 | 4 |
в этом и прелесть, тебе не надо думать что так и как происходит вне объекта. объект сгенерировал событие, м.б. в нем передал какие то данные и все. А подписчики, которые обрабатывают это событие уже решают что и как делать.
простой пример - ты сделал класс который качает по какой нибудь ссылке из интернета файл, при этом этот класс периодически генерирует событие в котором передает данные % скачанного. в другом классе (например форме) ты подписываешься (или не подписываешься) на это событие и к примеру делаешь на нем и обновляешь прогресс бар...
1
|
Master of Orion
|
|
05.05.2014, 14:01 | 5 |
Сообщение было отмечено maxon887 как решение
Решение
maxon887, вот вы наверное использовали форму, писали там всякий код. И писали, замечаю, обработчики событий. Для нажатий на кнопку, для загрузки формы, для изменения текста в тесктбоксе... Вы ведь не знаете, как они вызываются, и какие функции дергаются. Вы не наследуете класс формы и не имеете доступа к её внутренностям. Точно также создатели формы не знают, нужны ли эти события кому-то и как он с ними работать будет. Вы можете посылать эмейл при клике на кнопку, причем разработчики формы даже понятия не имели, что кто-то собирается так делать. Смысл в разрыве жесткой связи. Если вы сейчас не понимаете, почему жесткая завязка - это плохо, то со временем понимание придет (при некоторой настойчивости).
1
|
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
|
|
05.05.2014, 14:14 [ТС] | 6 |
Psilon, Да, я думал над этим, и в этом есть смысл, Спасибо! Но, мне как-то показалось, этого мало. Ведь если я не планирую писать расщиряемый код(типо с замахом на будущие), и предоставлять наружу, другим чувакам этакий мост, ввиде событий. То они мне посути ваще не нужны? В этом есть что то похожие с динамической загрузкой dll'лок.
0
|
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
|
05.05.2014, 14:17 | 7 |
maxon887, почитайте про шаблон проектирования Наблюдатель.
Вот событие в шарпе — это формализация данного шаблона на уровне синтаксиса языка. В той же джаве, например, нет событий в их шарповском понимании — там этот шаблон реализован через интерфейсы. Ну а тут — вот так. По личным ощущениям — удобнее, чем жабский подход.
2
|
Master of Orion
|
|
05.05.2014, 14:21 | 8 |
maxon887, каждый класс у вас должен быть "таким вот чужим чуваком", и никто ни о чем ничего кроме интерфейсов (в смысле набора публичных полей и методов) не знает. Это называется слабой связностью. И даже в пределах одной dll слабая связность является признаком зрелости программиста. Типичный пример - Qt.
1
|
kolorotur
|
05.05.2014, 14:25
#9
|
0
|
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
|
|
05.05.2014, 14:27 | 10 |
это не показатель - можно не расширяемый код написать, но с использованием правильных методов, код будет проще, удобней в отладке и надежней...
п.с. проверено на себе
1
|
Psilon
|
05.05.2014, 14:43
#12
|
Не по теме: kolorotur, у меня сейчас такой коллега на работе есть :) Хотя, наверное, не настолько отмороженный. Но любовь к интерфейсам у него просто с фанфарами поет, вот это уж точно )
0
|
05.05.2014, 16:01 | 13 |
maxon887, ну вообще почитайте литературу. По сути, события - те же самые делегаты, то есть все то же самое можно свободно реализовать одними делегатами. Но кода будет больше. Вот и разница. Если посмотреть код с событием через Ildasm, то там видно, что событие генерирует тот же код, что бы нам пришлось писать вручную при работе с голыми делегатами.
0
|
insite2012
|
05.05.2014, 16:28
#15
|
Не по теме: Psilon, еле сдержался, чтобы не порекомендовать моего любимого автора.))) Именно благодаря его книге я понял все тонкости, связанные с событиями и делегатами. До него и сам практически во тьме бродил)
0
|
gerrus
|
05.05.2014, 17:37
#16
|
Не по теме: ну всё.Иду читать
0
|
Psilon
|
05.05.2014, 19:39
#17
|
Не по теме: insite2012, gerrus, вот видите, а говорите, удержались... ;D
0
|
insite2012
|
05.05.2014, 19:42
События в .NET - каковы их концепция и назначение?
#18
|
Не по теме: Psilon, я не при чем! Они сами все нашли... :)
0
|
05.05.2014, 19:42 | |
Разбор указателей и структур - каковы их суть и назначение Концепция .NET в системном программировании Каковы перспективы VB.Net??? VB.Net vs C# Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |