ホームページ  >  記事  >  バックエンド開発  >  C#Rx の主要なインターフェイスについての深い理解

C#Rx の主要なインターフェイスについての深い理解

黄舟
黄舟オリジナル
2017-03-16 11:59:322404ブラウズ

この記事では主に C# Rx の主要なインターフェイスを深く理解するための関連情報を紹介します。必要な方は、Rx

IObservable の主要なインターフェイスをより深く理解するために

C# を参照してください。 .NET Framework 4.0 の IObserver インターフェイス 基本

クラス ライブラリ

が利用可能であり、.NET 3.5、Silverlight 3 および 4、および JavaScriptインストールできるパッケージに含まれています。

IObservable/IObserver

Rx は、.NET Framework 4.0 の新しい IObservable インターフェイスによって抽象化された、非同期および

event

ベースのデータ ソースをプッシュベースの監視可能なシーケンスとして公開します。 IObservable インターフェイスは、プルベースの列挙可能なコレクション用のよく知られた IEnumerable インターフェイスの複製です。 これは監視可能なデータ ソースを表し、関心のある人なら誰でもデータを送信できることを意味します。 このような関心のあるリスナーを表す依存する IObserver 実装のリストを維持し、状態の変更を自動的に通知します。
IObservableインターフェースの実装は、型Tの要素のコレクションとして見ることができます。したがって、IObservable は

整数

のコレクションとして見ることができ、整数はサブスクライブされたオブザーバー
にプッシュされます。「Rxとは」で述べたように、プッシュされた

モデル

の残りの半分はIObserverインターフェースによって表されます。 、これは、購読によって関心のあるオブザーバーを登録することを表します。 その後、アイテムは、サブスクライブされているオブザーバブル シーケンスからオブザーバーに配信されます。
Observable コレクションから通知を受け取るには、IObservable の Subscribe メソッドを使用して、IObserver

オブジェクト

を渡します。 このオブザーバーへの応答として、Subscribe メソッドはサブスクリプションへのハンドルとして IDisposable オブジェクトを返します。 これにより、完了時にサブスクリプションをクリーンアップできます。 このオブジェクトで Dispose を呼び出すと、オブザーバーがソースから切り離され、通知が配信されなくなります。 推測できるように、Rx では、.NET イベント モデルのように明示的にイベントのサブスクライブを解除する必要はありません。
オブザーバーは 3 つのパブリッシュ イベントをサポートしており、これらはインターフェイスのメソッドによって反映されます。 On

Next

は、監視可能なデータ ソースに利用可能なデータがある場合、0 回以上呼び出すことができます。 たとえば、マウス移動イベントの監視可能なデータ ソースは、マウスが移動するたびに Point オブジェクトを発行できます。 他の 2 つのメソッドは、完了またはエラーを示すために使用されます。
IObservable / IObserver インターフェイスは以下にリストされています。

public interface IObservable<out T> 
{ 
  IDisposable Subscribe(IObserver<T> observer); 
} 
public interface IObserver<in T> 
{ 
  void OnCompleted();// Notifies the observer that the source has finished sending messages.
  void OnError(Exception error); // Notifies the observer about any exception or error.
  void OnNext(T value);     // Pushes the next data value from the source to the observer.
}

Rx は、IObserver インターフェイスを自分で実装する必要がないように、Subscribe 拡張メソッドも提供します。 以下の例に示すように、監視可能なシーケンスの発行されたイベント (OnNext、OnError、OnCompleted) ごとに、呼び出されるデリゲートを指定できます。 イベントにアクションが指定されていない場合は、デフォルトの

動作

が発生します。

IObservable<int> source = Observable.Range(1, 5); //creates an observable sequence of 5 integers, starting from 1
IDisposable subscription = source.Subscribe(
              x => Console.WriteLine("OnNext: {0}", x), //prints out the value being pushed
              ex => Console.WriteLine("OnError: {0}", ex.Message),
              () => Console.WriteLine("OnCompleted"));

監視可能なシーケンス(マウスオーバーイベントのシーケンスなど)は、通常のコレクションと考えることができます。 したがって、コレクションに対して LINQ

クエリ

を記述して、フィルタリング、 グループ化 、合成などを実行できます。監視可能なシーケンスをより便利にするために、Rx アセンブリには多数のファクトリ LINQ 演算子 が用意されているため、これらを自分で実装する必要はありません。 これは、LINQ 演算子を使用して、監視可能なシーケンスのサブジェクトをクエリします。

警告:

IObservable / IObserver インターフェイスを自分で実装する必要はありません。 Rx は、これらのインターフェイスの内部実装を提供し、Observable および Observer タイプによって提供されるさまざまな拡張メソッドを通じてそれらを公開します。 詳細については、「監視可能なシーケンスの作成とクエリ」トピックを参照してください

以上がC#Rx の主要なインターフェイスについての深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。