Reactive Extensionsを使ってHello worldを書いてきました。これだけだと、ただのObserverパターンだし、イベントと比べて何が嬉しいかわからないですが、こいつにWhereなどのLINQでお馴染みのメソッドを使ってフィルタリングをかけたりすることが出来ます。
ちょっと嬉しくなるかな。ということで、サンプルです。
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { var subject = new Subject<int>(); // subjectから発行された値が3じゃないとSubscribeしている // IObserverに通知しないフィルタを仕掛ける subject.Where(i => i == 3) .Subscribe(i => Console.WriteLine("OnNext : " + i)); // 1, 2, 3を発行しても3しかコンソールに出力されない subject.OnNext(1); subject.OnNext(2); subject.OnNext(3); } }
実行結果は、以下のようになります。
OnNext : 3
1と2をOnNextで発行していますが、WhereでフィルタリングされたSubscribeしている所まで到達しません。こんな風にLINQでお馴染みのメソッドを使ってObserverパターンに便利な機能が色々追加されています。