Используются ли когда-либо обратные вызовы / события на основе интерфейса для делегатов? - PullRequest
0 голосов
/ 09 декабря 2010

В Java без делегатов события моделируются с помощью обратных вызовов интерфейса после шаблона наблюдателя.Меня поражает, что если работа над фреймворком с более чем полдюжины событий, использование делегатов становится довольно многословным упражнением.

Как Java-разработчик, который забыл свой C #, мне было интересно, есть ли ВЕЧНАЯ веская причинаиспользовать интерфейсы для событий или нужно ли действительно использовать делегатов повсюду?

Ответы [ 2 ]

2 голосов
/ 09 декабря 2010

Если всегда имеет смысл реагировать на множественные обратные вызовы, то имеет смысл использовать интерфейс.Однако вы можете захотеть написать некоторые методы адаптера, чтобы позволить интерфейсу быть реализованным, предоставляя делегаты для некоторых из обратных вызовов - только те, которые вы хотите.

Так работает Reactive Extensions ... почти никто никогда действительно не реализует IObserver<T> - они используют метод расширения IObservable<T>.Subscribe, который позволяет вызывающей стороне указывать OnNext, OnCompleted и OnError обработчики через делегаты.

Таким образом, вы получаете преимущества делегатов (которые обычно проще определить, чем интерфейсы, благодаря лямбда-выражениям и т. Д.), А также один согласованный объект для передачи, который представляет все связанные обратные вызовы.

0 голосов
/ 09 декабря 2010

Делегаты гораздо более гибкие. Поскольку в C # нет анонимных классов (в смысле Java), вы не можете легко реализовать встроенные интерфейсы. Поэтому всякий раз, когда API требует, чтобы я реализовал интерфейс, я должен выходить и записывать этот класс, который, в отличие от лямбды, заставляет меня физически отделять логику дальше друг от друга, что часто снижает читаемость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...