原文:http://www.atmarkit.co.jp/fdotnet/introrx/introrx_01/introrx_01_02.html
作者:河合 宜文
安裝方法
關於 Rx 的安裝,可以通過 Reactive Extensions (Rx) 的主頁 的直接下載安裝,當然也可以利用 NuGet 導入 dll (http://nuget.org/packages/Rx-Main) [譯註: NuGet 是VS集成的在線 dll部署工具,非常方便]。Rx 不管是 Installer 還是 NuGet 安裝的,都有 Stable(穩定版) 和 Experimental(實驗版) 兩種。
Stable版是API中方法名等不會再變更而Experimental版則是在Stable版中加入了一些實驗性的方法等。例如:C# 5.0中新增特性await/async關鍵字、Expand方法等只在Experimental版中有。只在Experimental版中有的方法會以[ExperimentalAttribute]特性標識,在Visual Studio中通過metadata的表示可以區分出來。因此,在利用Experimental版的時候,這些加上[ExperimentalAttribute]特性標識的方法將來方法名,參數列表還是有可能發生變化的,需要留意。
另外,Experimental版在現在Developer Preview(開發者預覽版)中的.NET Framework 4.5和WinRT(Windows 8 運行環境)中已經包含了。C#5.0中特別是針對異步編程比較大的變化策略,已經在反映在Experimental版中。
Assembly分類
Rx的Assembly按照如下功能劃分。
程序集名 | NuGet Package名(*1) | 功能 |
System.Reactive | Rx-Main | 基本Core API |
System.Reactive.Windows.Forms | Rx-WinForms | WindowsForm中使用的 ControlScheduler類(*2)和擴展方法 |
System.Reactive.Windows.Threading | Rx-WPF Rx-Silverlight | WPF/Silverlight中使用的DispatcherScheduler類(*2)和擴展方法 |
System.Reactive.Providers | Rx-Providers | IQbservable接口和其他類庫(*3) |
Microsoft.Reactive.Testing | Rx-Testing | UnitTest和Mockup |
Rx的Assembly一覽 | ||
Rx的Assembly文件、一般放在「C:\Program Files\Microsoft Reactive Extensions SDK」(32bit版),而64bit版則是放在「C:\Program Files (x86)\Microsoft Reactive Extensions SDK」) | ||
*1 一覽中提到的Package是指Stable版,Experimental版的時候則帶有「_Experimental」比如:「Rx_Experimental-Main」 | ||
*2 Scheduler 是基於Rx的時間和線程管理的類。ControlScheduler類是對於WinForm及控件進行BeginInvoke調用,DispatcherScheduler類是對Dispatcher進行BeginInvoke。 | ||
*3 「IQbservable」接口名取自「Queryable Observable」。表達式樹可以生成一個 Observable 對象。IObservable 接口和 IQbservable 接口的關係就和 IEnumerable 接口和 IQueryable 接口關係相當。 |
Windows Phone 7 SDK 裏集成的標準的 Rx 程序集則和上面說的有些不同:
程序集名 | 功能 |
System.Observable | IObservable<T>/IObserver<T>接口 |
Microsoft.Phone.Reactive | Core API和DispatcherScheduler類 |
Windows Phone 7 SDK的程序集一覽 |
如果更加重視是否是使用標準程序集且不需要額外引用程序集,那麼直接使用 Microsoft.Phone.Reactive;如果希望能在 WPF,Sliverlight 中移植,那麼就選擇 Data Developer Center 版本好了。
相關的庫
Javascript 版本並不包含在Install 中,但可以從 Rx 主頁最下方下載 ZIP 得到。庫的主體是 Rx.js ,除此之外還有 jQuery 和 prototype.js。
命名空間分類
Rx 主要是以擴展方法爲中心的,如果沒有正確的使用 using/Import 導入命名空間則無法使用。下面例舉主要的命名空間以及代表的功能和類。
名前空間 | 功能點 |
System | Subscribe訂閱 IObservable 接口使用的Lambda表達式的擴展方法 |
System.Reactive | 主要接口和一些基本類 |
System.Reactive.Concurrency | 實現 IScheduler 接口的一些類 |
System.Reactive.Disposables | 實現 IDisposable 接口的一些類 |
System.Reactive.Joins | 利用 Observable.And/Observable.Then 方法進行Join操作的類 |
System.Reactive.Linq | Rx 主要的命名空間,Observable 類和IObservable接口的一些擴展方法 |
System.Reactive.Subjects | 實現 ISubject 接口(實現 Rx 語義的事件)的一些類 |
System.Reactive.Threading.Tasks | Task 相互轉換的擴展方法 |
Rx 的命名空間和代表性的功能以及類 |
另外,Windows Phone 中,Microsoft.Phone.Reactive 程序集裏的 Rx 全部在 Microsoft.Phone.Reactive 命名空間下。
Reactive Extensions (Rx) 入門(1) —— Reactive Extensions 概要
Reactive Extensions (Rx) 入門(2) —— 安裝 Reactive Extensions
Reactive Extensions (Rx) 入門(3) —— Rx的事件編程①