Я пытался разобраться во всей информации, и я потерян. Я посмотрел на Delphi (Pascal), C, C ++, Java ... ничего не ясно. Итак, через месяц это проблема, как я ее вижу. Я могу быть совершенно не в курсе, поэтому, пожалуйста, скажите мне ... вежливо, пожалуйста.
Один отправитель события, один перехватчик, если отправитель регистрирует перехватчик. У меня есть 4 диалоговых окна, которые необходимо обновлять каждый раз, когда файл (код обработки которого находится в другом модуле, чем 4 диалоговых окна), изменяется. Я подумал об обновлении каждого по-старому, но потом я посмотрел на события Delphi и обработку сообщений. Посмотрим:
Файл F (Отправитель) завершил чтение и должен уведомить диалоги 1..4 о том, что теперь есть данные для их отображения и пользователь, с которым можно поиграть. Что лучше?
Попробуйте зарегистрировать Dialogs 1..4 в качестве слушателей, и отправитель как-нибудь вызовет OnUpdatedDataEvent?
Попробуйте отправить сообщение через систему, надеясь, что Dialogs 1..4 его поймает?
Обратите внимание, что событие связывает вещи, в то время как обмен сообщениями этого не делает ... и является трудной для отладки.
И мне интересно, как блок кода File сможет зарегистрировать 4 слушателя (диалоговые окна)?
То, на что я обращаю внимание, - это возможность каскадного вызова, то есть вызывающий абонент вызывает одного слушателя, который вызывает следующего ... пока он не достигнет конца цепочки. Мне даже интересно, возможно ли это вообще.
Пример:
Say File F - это список языков. Теперь DialogBox 1 что-то делает со списком (например, добавляет новый язык); это поле со списком обновляет F-файл; это, в свою очередь, вызывает DataUpdatedEvent. 4 диалоговых окна содержат, скажем, TComboBox, которые отображают список языков, когда они всплывают. Я хочу, чтобы 4 поля отметили изменение и обновили содержимое своего собственного поля со списком недавно обновленного файла ... не беспокоясь о том, как эти поля со списком знают, что им нужно обновить свое содержимое. Если он работает так, как предполагалось, параметр Sender будет перенесен, и диалоговое окно, которое вызвало dataUpdateEvent, будет пропущено, поскольку оно уже будет обновлено. В конце концов, если sender = self, то переход к следующему обработчику событий должен быть простым в реализации.
Все это потому, что я хочу тренировать свой мозг ... для предотвращения болезни Альцгеймера, не очень успешно, я мог бы добавить.