Рассмотрим событие как интерфейс обратного вызова, где интерфейс имеет только один метод.
Перехватывайте только те события, которые вам нужны
Что касается событий, вам нужно реализовать обработчики только тех событий, которые вы хотите обработать. В шаблоне интерфейса наблюдателя вам нужно будет реализовать все методы во всем интерфейсе, включая реализацию тел методов для типов уведомлений, которые вам на самом деле не нужны. В вашем примере вам всегда нужно реализовывать OnFoundDirectory и OnFoundFile, даже если вам нужно только одно из этих событий.
Меньше обслуживания
Еще одним преимуществом событий является то, что вы можете добавить новое событие к определенному классу, чтобы оно подняло его, и вам не нужно менять каждого существующего наблюдателя. Тогда как, если вы хотите добавить новый метод в интерфейс, вы должны обойти каждый класс, который уже реализует этот интерфейс, и реализовать новый метод во всех них. Однако с событием вам нужно только изменить существующие классы, которые действительно хотят что-то сделать в ответ на новое событие, которое вы добавляете.
Шаблон встроен в язык, поэтому все знают, как его использовать
События идиоматичны, когда вы видите событие, вы знаете, как его использовать. С интерфейсом наблюдателя люди часто реализуют различные способы регистрации для получения уведомлений и подключения наблюдателя. такой же.
Плюсы за интерфейсы
У меня не так много плюсов в интерфейсах. Я предполагаю, что они заставляют кого-то реализовывать все методы в интерфейсе. Но вы не можете заставить кого-то правильно реализовать все эти методы, поэтому я не думаю, что в этом есть большая ценность.
Синтаксис
Некоторым людям не нравится способ объявления типа делегата для каждого события. Кроме того, стандартные обработчики событий в .NET Framework имеют следующие параметры: (отправитель объекта, аргументы EventArgs). Поскольку отправитель не указывает конкретный тип, вам необходимо выполнить приведение вниз, если вы хотите его использовать. На практике это часто хорошо, но кажется не совсем правильным, потому что вы теряете защиту статической системы типов. Но если вы реализуете свои собственные события и не следуете соглашению платформы .NET, вы можете использовать правильный тип, чтобы не требовалось потенциальное приведение вниз.
person
Scott Langham
schedule
15.02.2009