IObservable<T>
和IObserver<T>
接口直接放在.NET Framework 4.0 Beta2中的System
命名空间中。为什么不在System.Collections.Generic
,例如IEnumerable<T>
?
P.S。 Silverlight Toolkit中的Reactive Framework预览包含IObserver<T>
命名空间中的System.Collections.Generic
。
答案 0 :(得分:4)
IObservable是一个接口,用于标识实现Observer模式的类。它与收藏无关。它与提供事件的替代方案更为相关。
答案 1 :(得分:2)
新的IObservable / IObserver接口描述的东西是一个抽象,远远高于只能被视为计算的特殊情况的集合(这就是Haskell中的列表是monad的原因)。因此很明显,这种泛化被置于System名称空间。
看看Erik Meijer的this brilliant cast,他描述了接口背后的想法。
答案 2 :(得分:1)
虽然这是一个我偶然发现的老问题,但我只想支持@ ControlFlow对IObservable和IEnumerable之间的'二元论'的评估,作为'基于推送'与'基于拉动'的集合,其链接指向Erik Meijer的'Rx'在15分钟内,他可以引用他的话。 http://channel9.msdn.com/posts/Charles/Erik-Meijer-Rx-in-15-Minutes/
因此,这种基于推送的集合可以从根本上将“一系列普通的被调用事件”的基本范式转换为异步的,可选择的,可查询的,可通过的和可订阅的一类声明可操作的集合。这样做的东西属于核心BCL命名空间或者可能值得拥有它,但是远远超出了Yet-Another-Collection来共享它的命名空间。请注意,这只是我的意见。