Шаблон наблюдателя реализован в C # с делегатами? - PullRequest
11 голосов
/ 21 июня 2009

На вопрос уже получен ответ: В C # не реализован ли шаблон наблюдателя с использованием Events?

Он спрашивает, реализован ли шаблон наблюдателя в c # с использованием событий.

Хотя я получаю шаблон событий и наблюдателей, разве шаблон наблюдателей на самом деле не просто делегаты, а события - это дальнейшая реализация?

1 Ответ

28 голосов
/ 21 июня 2009

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

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

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

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

...