11

Récemment Erik Meijer et d'autres ont IObservable/IObserver montrent comment est le dual de IEnumerable/IEnumerator. Le fait qu'ils soient duels signifie que toute opération sur une interface est valide sur l'autre, fournissant ainsi une base théorique pour le Reactive Extentions for .Netexemples d'interfaces doubles utiles ou non trival

Y a-t-il d'autres interfaces doubles? Je suis intéressé par n'importe quel exemple, pas seulement basé sur .Net.

+1

Soyez prudent avec le terme «double interface». Bien que l'utilisation du terme * dual * soit évidemment correcte ici, l'expression * dual interface * est communément associée à 'IDispatch' et à l'automation, ce qui est un peu confus (c'est ce que je pensais que cette question était avant de l'ouvrir). – Aaronaught

Répondre

3

Un autre exemple serait TextReader et TextWriter, bien qu'il y ait encore plus de bruit que dans le cas des observables et des énumérables. En principe, les signatures de type seraient:

interface ITextReader { 
    // Read: void -> int 
    int Read(); 
} 

interface ITextWriter { 
    // Write: int -> void 
    void Write(int val); 
} 
3

Un autre exemple est le type de produit AB et le type de somme A + B de deux types A et B. Dans Haskell vous pouvez les écrire comme:

data Prod a b = P a b -- this is the same as the pair type (a,b)

data Sum a b = Left a | Right b -- the same as the Either a b type

check here pour plus de détails

2

covariance et contravariance est anothe r exemple. Je pense. Je peux me tromper. «De nombreuses dualités existent dans différentes disciplines, permettant de grands transferts de connaissances entre différents domaines: par exemple, en logique formelle, la loi de De Morgan permet de convertir des expressions construites à partir de conjonctions en des construits à partir de disjonctions, et inversement. En électronique, il existe des similitudes entre le comportement des condensateurs et des inductances: en savoir un et comment aller et venir entre les domaines, et vous connaissez l'autre: le calcul de Fourier fournit des duels entre les domaines temporels et fréquentiels. Intéressant.

Ils appellent également System.Reactive le dual de System.Interactive. Donc, la plupart des fonctions dans l'un des assemblages ont un double dans l'autre. Pour clarifier, ce n'est pas seulement que IO est le dual de IE, mais les fonctions qui les opèrent sont également dualisées. Donc, pour répondre à votre question, il existe de nombreuses interfaces dualisées. Vous pouvez dupliquer n'importe quelle interface. Vous venez d'échanger les entrées et sorties et la direction de la fonction. Certains ne seront pas utiles, ou seront le double d'eux-mêmes. Cependant, il y a parfois des cachettes très puissantes qui attendent d'être découvertes.

+0

Up-vote pour avoir cité le blog de Bart De Smet. :-RÉ –