В вашем примере ComicBookObserver
реализует IObserver<ComicBook>
, поэтому он хочет видеть ComicBook
.
Publisher
реализует IObservable<Book>
, поэтому он выводит Book
.
Интерфейс Book
не соответствует более производному типу ComicBook
, необходимому для ComicBookObserver
.
Если вам нужно соблюдать определенные типы c, тогда да, вам нужно будет подписаться несколько раз с подписчиками укажите c для этих типов.
Вы можете использовать метод Rx OfType<ComicBook>()
для создания нового наблюдаемого из вашего IObservable<Book>
.
Например:
Publisher p = new Publisher();
p.OfType<ComicBook>().Subscribe(new ComicBookObserver());
Это имеет то преимущество, что будут наблюдаться только элементы типа ComicBook
, и вам не нужно будет выполнять какие-либо дополнительные проверки типа.