28 votes

Qu'est-ce que LINQ to événements.k.un RX Cadre?

Qu'est-ce que LINQ to événements.k.un RX Cadre aka le Réactif Extensions .NET 4.0 (mais également disponible en tant que rétroportage des versions)?

En d'autres termes, qu'est-ce que tous les trucs dans System.Reactive.dll pour?

23voto

amazedsaint Points 5712

.NET Rx équipe (ce n'est pas un nom officiel) a constaté que tout pousser la séquence des événements, rappels) peut être considérée comme un pull séquence (comme nous avons l'habitude de le faire lors de l'accès à enumerables) – ou bien elles sont à Double dans la nature. En bref observateur/observable modèle est le dual de l'énumération modèle.

Donc ce qui est cool à propos de à propos de cette dualité?

Tout ce que vous faites avec Pull séquences (lire déclarative style de codage) est applicable à pousser les séquences ainsi. Voici quelques aspects. Vous pouvez créer des Observables à partir des événements existants et de les utiliser comme des citoyens à part entière dans .NET – je.e, vous pouvez créer une observable à partir d'un événement, et à exposer la même propriété.

Comme IObservable est la mathématique double de IEnumerable .NET Rx facilite LINQ plus de pousser les séquences comme des Événements, un peu comme LINQ sur IEnumerables

Il donne plus de liberté pour créer de nouveaux événements, vous pouvez créer des événements de générale des événements.

.NET Rx introduit deux interfaces, IObservable et IObserver qui "offre une alternative à l'utilisation d'entrée et de sortie des adaptateurs en tant que producteur et consommateur de l'événement, les sources et les puits" et ce sera bientôt le de facto pour l'écriture de code asynchrone de façon déclarative. Voici un exemple rapide.

//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);

Vous pouvez passer par un de ces postes ainsi d'obtenir la tête et la queue dans le détail. Aussi jeter un oeil à ce qui le concerne, de code source, ainsi.

Découvrez cette série d'articles

4voto

James Black Points 26183

Vous pouvez en lire plus à ce sujet ici: http://themechanicalbride.blogspot.com/2009/07/introducing-rx-linq-to-events.html

Ma première exposition a été sur ce blog, comme je suis à la lecture de son livre sur "F"#: http://tomasp.net/articles/reactive-ii-csevents.aspx

Fondamentalement, ma compréhension, c'est que quand vous écrivez un gestionnaire d'événements pour les mouvements de la souris, vous pouvez par exemple vous voulez en permanence la capture de ces événements, et peut-être être en mesure de compter le nombre de mouvements ou de clics, mais, fondamentalement, vous voulez utiliser cette information de manière plus que juste comme un gestionnaire d'événement. Donc, il suffit de traiter les événements comme un flux continu.

4voto

dahlbyk Points 24897

Aussi, découvrez ce Canal 9 de la vidéo: Expert Expert: Brian Beckman et Erik Meijer - à l'Intérieur de l' .NET Réactif Cadre (Rx)

À partir de la description:

L' .NET Réactif Cadre (Rx) est la mathématique double de LINQ to Objets. Il se compose d'une paire de interfaces IObserver/IObservable que représentent-poussoir, ou à des observables, les collections, ainsi qu'une bibliothèque de les méthodes d'extension qui mettent en œuvre les LINQ Opérateurs de Requête Standard et d'autres flux de transformation fonctions.

4voto

Sergey Aldoukhov Points 8386

Je pense que l'essence de la RX est de changer l'angle avec lequel on regarde les informations. Naturellement, chaque élément d'information est le résultat d'un processus, qui prend place dans l'espace-temps du continuum. L'approche traditionnelle fonctionne avec la projection du processus de la "actuel" de temps en avion, de perdre les détails de la dimension temps que le résultat.

RX fonctionne avec la projection à une autre dimension, la saisie du temps composant, ainsi il n'est pas étonnant que LINQ to RX est un sur-ensemble de l'ordinaire LINQ.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X