Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 26.10.2014
Сообщений: 74

Не понимаю суть событий

19.07.2015, 21:15. Показов 1870. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Пытаюсь разобраться в событиях в .NET и не могу понять, зачем они нужны? Допустим, моя программа считает числа от 1 до 10. Я хочу, чтобы при достижении числа 8 произошло срабатывание, например, выдалось сообщение (на MSDN есть подобный пример, но он не доведен до конца). В многочисленных статьях и мануалах написано, что для этого нужно создать делегат, создать событие, выполнить подписку, выполнить вызов события... Куча действий! И всё для того, чтобы в цикле счетчика поставить условие и указать:
C#
1
2
3
4
for (int i=1; i<=10; i++)
{
if (i==8) { //генерирование события }
}
Так я с таким же успехом могу вместо генерирования события вызвать необходимый обработчик!, то есть
C#
1
2
3
4
for (int i=1; i<=10; i++)
{
if (i==8) { handler() }
}
и тогда вообще все эти делегаты и т.п. не нужны.
Или всё-таки можно обеспечить срабатывание программы, не устанавливая в цикле счетчика условие? Поясните, пожалуйста
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.07.2015, 21:15
Ответы с готовыми решениями:

Пояснить суть и назначение событий, желательно на примере
Всем привет. Попробовал почитать про события и вообще не понятно с чем их есть и как их применять. Может быть кто то напишет на...

Не понимаю суть ошибки
Суть задачи: Запросите у пользователя строку, состоящию из 5 символов, и проверьте, является ли она примером, складывающим два однозначных...

Правильно ли я оформил таблицы, не понимаю суть задачи, разбор
Прикрепляю в Десктоп - Задания и Варианты Прикрепляю в Датеб - Сам БД Заполнил таблицу. Правда не понял. Зачем мне поле...

11
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
19.07.2015, 21:23
Цитата Сообщение от ctakah3112 Посмотреть сообщение
Так я с таким же успехом могу вместо генерирования события вызвать необходимый обработчик
Да, можете. Если вы заранее знаете какой обработчик нужно вызывать. А если нет?
0
 Аватар для Midian
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,690
19.07.2015, 21:23
Например, если вы захотите разом выполнить несколько методов, тогда вы подпишитесь на них и вызвав 1 раз событие, оно вызовет все эти методы.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
19.07.2015, 21:27
Цитата Сообщение от ctakah3112 Посмотреть сообщение
не могу понять, зачем они нужны?
Простой пример.
Вы пишете свою библиотеку, в ней в каком-то классе происходят действия, и вам нужно сообщить что-то извне этой библиотеки. Кому - на данный момент неизвестно, и не важно, просто нужно обеспечить, чтобы внешний вызывающий код имел возможность получить уведомление и информацию из вашего кода (если внешнему коду это потребуется). Вот тут вам и помогут события.
Создали событие (возможно, со своим аргументом), и вызвали его когда необходимо.
А внешний код (консоль, форма, не важно) при желании подпишется на это событие и получит уведомление (с информацией).
1
 Аватар для VLK
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,236
19.07.2015, 22:18
ctakah3112,

1. а если за вот этими пару словами
C#
1
{ //генерирование события }
скрывается тонна кода, ты будешь ее писать в теле if?

2. события это обыкновенная функция (метод), зачем ее выделили в какие то там события? ответ очень простой, что бы когда ты будешь редактировать чей то код, тебе не пришлось ломать голову "а что это за метод такой?" а сразу было понятно что это событие.

И вообще в C# дофига всяких штук, которые на первый взгляд нафиг не нужны, но они есть и их задача делать код более понятным для программиста, с чем они успешно справляются.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
19.07.2015, 23:27
Цитата Сообщение от ctakah3112 Посмотреть сообщение
Так я с таким же успехом могу вместо генерирования события вызвать необходимый обработчик!
С таким же успехом разработчик библиотеки элеменов управления Windows Forms мог вместо генерирования события Click на кнопке просто после условия поставить код, который должен выполняться при клике на кнопку.
Проблема в том, что при разработке этой библиотеки сотрудник Microsoft понятия не имел о том, какой код вы хотите выполнять при клике на эту кнопку.
1
 Аватар для VLK
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,236
19.07.2015, 23:34
и кстати да, ты на данное событие можешь добавить код из вне, без всяких проблем, в отличии от того что ты написал.
0
 Аватар для 1337trix
23 / 24 / 11
Регистрация: 04.12.2014
Сообщений: 422
19.07.2015, 23:40
Не мешайте мух с котлетами)
C#
1
2
3
4
5
6
for (int i=1; i<=10; i++)
{
if (i==8) { 
MessageBox.Showw("Это номер воооосемь!");
 }
}
зачем в вашем случае делегаты?
Цитата Сообщение от ctakah3112 Посмотреть сообщение
handler()
кстати, что это? если класс и тд, то просто надо создать его представителя и воспроизвести...
посмотрите мой код, это вполне простой пример, не нужен в простых примерах делегат
0
Кактус
 Аватар для eocron
67 / 67 / 19
Регистрация: 23.05.2012
Сообщений: 342
20.07.2015, 01:15
Данный вопрос из разряда зачем нужен foreach если есть for и while? Ответ прост: абстракция и простота.
Делегаты являются хорошим упрощением, с ними код выглядит элементарно понятнее. Конечно, можно обойтись без них, но стоит ли это того?
Если проще, делегаты это своего рода broadcast вещание. Как радиовышка передает сигнал всему миру, так и событие - передает контроль всем обработчикам, которые на него подписались.
При этом радиовышка внутри может работать как угодно (синхронно, асинхронно) и ей совершенно не хочется знать, что существует Петр Иванович с его приемником и его способом приема, она ему просто закинет информацию, а он делай с ней, что хочет.

Итого: да, можно написать свой список делегатов с блекджеком и барышнями, и реализовать те же самые события вызвав этот список по вызову спец. функции, но проще все же будет разобраться с событиями.
1
1 / 1 / 0
Регистрация: 26.10.2014
Сообщений: 74
20.07.2015, 16:02  [ТС]
Спасибо, но один вопрос остается.
Допустим, что переменная int i - глобальная в пределах моего класса, и с ней происходят некие арифметические манипуляции. Допустим, я не могу их постоянно контролировать, но я хочу, чтобы при равенстве этой переменной конкретному значению, например, тем же восьми, были запущены определенные методы. Я не хочу на каждом шагу ставить конструкцию
C#
1
...if (i==8) { //генерирую событие }
а хочу один раз описать это условие, чтобы на любом этапе при i=8 сгенерировалось событие, а дальше уже сработают нужные обработчики. Можно ли это сделать? и если можно, простой пример
0
 Аватар для VLK
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,236
20.07.2015, 17:00
ctakah3112, к сожалению это не возможно.
Я когда изучал C# после C++ тоже думал что события могут что то подобное, на то они события, но оказалось все тривиально, надо каждый раз проверять.
0
1168 / 886 / 517
Регистрация: 09.04.2014
Сообщений: 2,101
20.07.2015, 17:35
Лучший ответ Сообщение было отмечено ctakah3112 как решение

Решение

Цитата Сообщение от ctakah3112 Посмотреть сообщение
Допустим, что переменная int i - глобальная в пределах моего класса, и с ней происходят некие арифметические манипуляции. Допустим, я не могу их постоянно контролировать, но я хочу, чтобы при равенстве этой переменной конкретному значению, например, тем же восьми, были запущены определенные методы.
Для этого используйте, вместо переменной, свойство:
C#
1
2
3
4
5
6
7
8
9
10
11
private int myVar=0;
private int MyVar
{
get{return myVar;}
set
   {
      myVar=value;
      if(myVar == 8)
         { //генерирую событие }
   }
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.07.2015, 17:35
Помогаю со студенческими работами здесь

Сгенерировать 30 случайных событий с интенсивностью 10 событий в час с помощью мастера функций
Добрый день! Помогите решить.:( Задача: Сгенерировать 30 случайных событий с интенсивностью 10 событий в час с помощью мастера функций MS...

Суммой двух событий А и В называется событие С, состоящее…1) в наступлении хотя бы одного из событий А и В2
Суммой двух событий А и В называется событие С, состоящее… 1) в наступлении хотя бы одного из событий А и В 2) в наступлении события А...

Произведением двух событий А и В называется событие С, состоящее…1) в наступлении хотя бы одного из событий
Произведением двух событий А и В называется событие С, состоящее… 1) в наступлении хотя бы одного из событий А и В 2) в наступлении...

Отделение работы обработчика событий клавиатуры от событий ввода текста в поля редактирования
Проблема: есть форма с графическими компонентами, в которых редактируется текст. И вот проблема - обработчик событий клавиатуры...

Нужен батник для создания отчета событий и их свойств из журнала событий на локальном компьютере
Пакетный файл, предназначенный для создания отчета событий и их свойств из журнала событий на локальном компьютере. Журналы событий:...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru