Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
1

События в .NET - каковы их концепция и назначение?

05.05.2014, 13:30. Показов 1269. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я просто не могу понять концепцию событий и зачем они вообще нужны. С делегатом тут всё понятно, указатель на функцию - вещь нужная, можно асинхронные вызовы делать, вслепую функции вызвать ну и т.д. А вот зачем нужны события не понимаю, ведь всё тоже самое можно реализовать и передачей указателя на parent и потом изменять его состояние как захочется и где захочется. Подумал может это какая-то фича могопоточности, а тут нет, вызванная функция события, оказалась в том же потоке. Обратил внимания что очень многие фишки .NET реализованы на событиях - значит в них есть какой то смысле))). Объясните мне пожалуйста зачем они вообще нужны, и где их использование оправданно а где нет.
П.С. нужный мне функционал я могу реализовать и так и так, а вот как правильно не знаю
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2014, 13:30
Ответы с готовыми решениями:

Делегаты и события - каковы их суть и назначение
Привет. Сейчас изучаю C#. Подошел к теме делегатов и событий. И вот если с делегатами еще...

Каковы суть и назначение ref и out
Читал книги, юзал msdn, но все равно не смог понять про операторы ref и out, точнее про ref...

Каковы суть и назначение #include <iomanip>
Подскажите новичку, что такое #include &lt;iomanip&gt; и для чего это надо? Только на понятном языке :D

Каковы суть и назначение Unit Tests
Всем привет! Народ, что такое Юнит тесты? с чем их едят и для чего вообще нужны? Расскажите кому...

17
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
05.05.2014, 13:41 2
Цитата Сообщение от maxon887 Посмотреть сообщение
Объясните мне пожалуйста зачем они вообще нужны, и где их использование оправданно а где нет.
имхо. одна из основных целей событий - разрыв жесткой связи между объектами.
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
Цитата Сообщение от maxon887 Посмотреть сообщение
то дальше фиг его знает что происходит?
в этом и прелесть, тебе не надо думать что так и как происходит вне объекта. объект сгенерировал событие, м.б. в нем передал какие то данные и все. А подписчики, которые обрабатывают это событие уже решают что и как делать.
простой пример - ты сделал класс который качает по какой нибудь ссылке из интернета файл, при этом этот класс периодически генерирует событие в котором передает данные % скачанного.
в другом классе (например форме) ты подписываешься (или не подписываешься) на это событие и к примеру делаешь на нем и обновляешь прогресс бар...
1
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
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
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
05.05.2014, 14:17 7
maxon887, почитайте про шаблон проектирования Наблюдатель.
Вот событие в шарпе — это формализация данного шаблона на уровне синтаксиса языка.
В той же джаве, например, нет событий в их шарповском понимании — там этот шаблон реализован через интерфейсы.

Ну а тут — вот так. По личным ощущениям — удобнее, чем жабский подход.
2
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.05.2014, 14:21 8
maxon887, каждый класс у вас должен быть "таким вот чужим чуваком", и никто ни о чем ничего кроме интерфейсов (в смысле набора публичных полей и методов) не знает. Это называется слабой связностью. И даже в пределах одной dll слабая связность является признаком зрелости программиста. Типичный пример - Qt.
1
kolorotur
05.05.2014, 14:25
  #9

Не по теме:

Цитата Сообщение от Psilon Посмотреть сообщение
И даже в пределах одной dll слабая связность является признаком зрелости программиста.
Был у меня коллега из Южной Азии, так этот товарищ любил на каждый чих интерфейс объявлять.
Все классы были "голыми", а каждое свойство и метод — отдельным интерфейсиком.
Не знаю, может он под COM долго стучал, но бесило неимоверно :)

0
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
05.05.2014, 14:27 10
Цитата Сообщение от maxon887 Посмотреть сообщение
Ведь если я не планирую писать расщиряемый код(типо с замахом на будущие)
это не показатель - можно не расширяемый код написать, но с использованием правильных методов, код будет проще, удобней в отладке и надежней...

п.с. проверено на себе
1
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
05.05.2014, 14:41  [ТС] 11
Ладно ребята, всем спасибо. Кое-что понял, кое что со временем придёт. Думаю тему можно закрывать))
0
Psilon
05.05.2014, 14:43
  #12

Не по теме:

kolorotur, у меня сейчас такой коллега на работе есть :) Хотя, наверное, не настолько отмороженный. Но любовь к интерфейсам у него просто с фанфарами поет, вот это уж точно )

0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
05.05.2014, 16:01 13
Цитата Сообщение от maxon887 Посмотреть сообщение
Я просто не могу понять концепцию событий и зачем они вообще нужны.
maxon887, ну вообще почитайте литературу. По сути, события - те же самые делегаты, то есть все то же самое можно свободно реализовать одними делегатами. Но кода будет больше. Вот и разница. Если посмотреть код с событием через Ildasm, то там видно, что событие генерирует тот же код, что бы нам пришлось писать вручную при работе с голыми делегатами.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
05.05.2014, 16:23 14
insite2012, тут не тот уровень еще Человек вообще не понимает, зачем нужны функции первого класса. Подрастет - поймет жеж
0
insite2012
05.05.2014, 16:28
  #15

Не по теме:

Psilon, еле сдержался, чтобы не порекомендовать моего любимого автора.))) Именно благодаря его книге я понял все тонкости, связанные с событиями и делегатами. До него и сам практически во тьме бродил)

0
gerrus
05.05.2014, 17:37
  #16

Не по теме:

ну всё.Иду читать

Эндрю Троелсен "С# и платформа .NET
:D

0
Psilon
05.05.2014, 19:39
  #17

Не по теме:

insite2012, gerrus, вот видите, а говорите, удержались... ;D

0
insite2012
05.05.2014, 19:42     События в .NET - каковы их концепция и назначение?
  #18

Не по теме:

Psilon, я не при чем! Они сами все нашли... :)

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2014, 19:42

Разбор указателей и структур - каковы их суть и назначение
Доброго времени суток форумчане. В университете мы изучаем C++ по учебнику Павловской и Щупака....

Концепция .NET в системном программировании
Помогите пожалуйста..:cry: Имеется тема для курсовой работы. Но не удается ничего найти. Перерыл...

Каковы перспективы VB.Net??? VB.Net vs C#
Как вы думаете, каковы перспективы развития VB.Net??? Каковы потенциальные специфические области...

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru