Шаблон "наблюдатель" реализован в C# с делегатами?

Краткий ответ: НЕТ , но не в javascript. Похоже, что ваше решение - единственный способ не возвращать контроль обратно в окружающую среду.

Это необходимо, если среда не поддерживает события. Вероятно, они также не поддержали бы установленное время ожидания.

settimeout, безусловно, лучший способ, если вы находитесь в управляемой событиями среде, такой как браузер или node.js.

11
задан Community 23 May 2017 в 10:32
поделиться

1 ответ

Вы правы. Событие - это просто делегат с немного другой функциональностью. Весь шаблон наблюдателя может быть реализован с помощью делегатов, даже не касаясь ключевого слова event .

Тогда вас может заинтересовать то, что ключевое слово «event» фактически приносит в таблицу.

  • События могут быть частью интерфейса, тогда как обычное поле делегата не может
  • События не могут быть вызваны внешними классами, но обычные делегаты могут
  • иметь дополнительные средства доступа (добавление и удаление), которые вы можете переопределить и предоставить настраиваемые функции для

Изменить: Вот отличная запись со сравнением кода IL между событиями и делегатами. (Подсказка: почти то же самое).

28
ответ дан 3 December 2019 в 03:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: