Maison >développement back-end >Tutoriel C#.Net >Compréhension approfondie des principales interfaces de C#Rx
Cet article présente principalement les principales interfaces de C# Rx et des informations pertinentes pour une compréhension approfondie. Les amis dans le besoin peuvent se référer à
C#. Rx Une compréhension approfondie des principales interfaces
Les interfaces IObservable / IObserver sont disponibles dans la base .NET Framework 4.0 bibliothèque de classes , et elles sont incluses dans .NET 3.5 qui peut être installé , dans des packages en Silverlight 3 et 4 et JavaScript.
IObservable/IObserver
Rx expose des sources de données asynchrones et basées sur des événements sous forme de séquences observables push optimisées par .NET Framework 4.0. Le nouveau IObservable abstraction de l'interface dans . L'interface IObservable est une duplication de l'interface familière IEnumerable pour les collections énumérables basées sur l'extraction. Il représente une source de données observable, ce qui signifie qu’il peut envoyer des données à toute personne intéressée. Il maintient une liste des implémentations dépendantes d'IObserver représentant ces auditeurs intéressés et les informe automatiquement de tout changement de statut.
Une implémentation de l'interface IObservable peut être considérée comme une collection d'éléments de type T. Par conséquent, un IObservable peut être considéré comme une collection de entiers, où les entiers seront poussés vers les observateurs abonnés
Comme mentionné dans "Qu'est-ce que Rx", en poussant Le l'autre moitié du modèle est représentée par l'interface IObserver, qui représente un observateur qui a manifesté son intérêt via des abonnements. L'élément est ensuite livré à l'observateur à partir de la séquence observable à laquelle il est abonné.
Pour recevoir les notifications d'une collection observable, vous lui transmettez un objet IObserver en utilisant la méthode Subscribe de IObservable. En échange de cet observateur, la méthode Subscribe renvoie un objet IDisposable comme handle de l'abonnement. Cela vous permet de nettoyer l'abonnement lorsque vous avez terminé. L’appel de Dispose sur cet objet détache l’observateur de la source afin que les notifications ne soient plus délivrées. Comme vous pouvez le déduire, dans Rx, il n'est pas nécessaire de se désabonner explicitement des événements comme dans le modèle d'événement .NET.
L'observateur prend en charge trois événements de publication, qui sont reflétés par les méthodes de l'interface. OnNext peut être appelé zéro ou plusieurs fois lorsque la source de données observable dispose de données disponibles. Par exemple, une source de données observable pour les événements de mouvement de la souris pourrait émettre un objet Point à chaque mouvement de la souris. Les deux autres méthodes sont utilisées pour indiquer l'achèvement ou les erreurs.
Les interfaces IObservable / IObserver sont listées ci-dessous.
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 fournit également la méthode d'extension Subscribe afin que vous puissiez éviter d'implémenter vous-même l'interface IObserver. Pour chaque événement publié (OnNext, OnError, OnCompleted) de la séquence observable, vous pouvez spécifier le délégué qui sera appelé, comme le montre l'exemple ci-dessous. Si aucune action n'est spécifiée pour un événement, le comportement par défaut se produira.
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"));
Vous pouvez considérer une séquence observable (telle qu'une séquence d'événements de survol de la souris) comme une collection normale. Par conséquent, vous pouvez écrire des requêtes LINQ sur des collections pour effectuer du filtrage, du regroupement, de la composition, etc. Pour rendre les séquences observables plus utiles, l'assembly Rx fournit un certain nombre d'opérateurs LINQd'usine, vous n'avez donc pas besoin d'en implémenter vous-même. Cela interrogera le sujet de la séquence observable à l'aide des opérateurs LINQ. Attention :
Vous n'avez pas besoin d'implémenter vous-même l'interface IObservable / IObserver. Rx vous fournit des implémentations internes de ces interfaces et les expose via diverses méthodes d'extension fournies par les types Observable et Observer. Pour plus d'informations, consultez la rubrique Création et interrogation de séquences observables
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!