什么是LINQ to events, 又称作RX Framework 或者在.NET 4.0 中也叫做反应式扩展(但也有向前兼容的版本)?
换句话说,System.Reactive.dll中的所有内容都是干什么用的?
什么是LINQ to events, 又称作RX Framework 或者在.NET 4.0 中也叫做反应式扩展(但也有向前兼容的版本)?
换句话说,System.Reactive.dll中的所有内容都是干什么用的?
.NET Rx团队(这不是官方名称)发现任何推送序列(事件、回调)也可以被视为拉取序列(我们在访问可枚举对象时通常使用的方式)- 它们具有双重性质。简而言之,观察者/可观察对象模式是枚举模式的对偶。
那么这种二元性有什么酷的地方呢?
所有 Pull 序列(声明式编码)中所做的任何操作也适用于 Push 序列。以下是一些方面。 您可以从现有事件创建 Observables,然后在 .NET 中将其用作一等公民 - 例如,您可以从事件创建一个 Observable,并将其公开为属性。
由于 IObservable 是 IEnumerable 的数学对偶,因此 .NET Rx 可以像 LINQ 针对 IEnumerables 一样便捷地对 Push 序列(如事件)使用 LINQ。
它赋予了更大的自由度来组合新事件 - 您可以从一般事件创建特定事件。
.NET Rx 引入了两个接口,IObservable 和 IObserver,“提供了使用输入和输出适配器作为事件源和汇的生产者和消费者的替代方法”,这很快就会成为以声明方式编写异步代码的事实标准。以下是一个快速示例。
//Create an observable for MouseLeftButtonDown
var mouseLeftDown=Observable.FromEvent<MouseButtonEventArgs>
(mycontrol,"MouseLeftButtonDown");
//Query the above observable just to select the points
var points = from ev in mouseEvents
select ev.EventArgs.GetPosition(this);
//Show points in the window's title, when ever user
//presses the left button of the mouse
points.Subscribe(p => this.Title = "Location ="
+ p.X + "," + p.Y);
您也可以阅读这些帖子,以详细了解相关信息。此外,还应查看相关源代码。