Шаблон наблюдателя реализован на С# с делегатами?

Уже есть ответ на вопрос, который В С# не Разве шаблон наблюдателя уже реализован с использованием событий?

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

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


person Coding Monkey    schedule 21.06.2009    source источник
comment
Не могли бы вы уточнить свой вопрос? Вы, кажется, знаете о другом вопросе и ответе на него, поэтому вы, кажется, спрашиваете что-то в дополнение к этому, но мне непонятно, что это такое.   -  person Mark Seemann    schedule 21.06.2009


Ответы (1)


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

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

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

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

person womp    schedule 21.06.2009
comment
@womp, что касается вашего первого пункта, Action<T> не является делегатом, который может быть частью интерфейса? - person Matt; 14.06.2015
comment
@womp, что касается вашего первого пункта, Action<T> не является делегатом, который может быть частью интерфейса? public interface ITest { void SupplyCallbackMethod(Action<int> callback); } - person Matt; 14.06.2015