11

recenti Erik Meijer e altri hanno mostrano come IObservable/IObserver è il dual di IEnumerable/IEnumerator. Il fatto che siano duali significa che qualsiasi operazione su un'interfaccia è valida sull'altra, fornendo così una base teorica per lo Reactive Extentions for .NetEsempi di doppi interfacce utili o non trival

Esistono altre interfacce doppie? Sono interessato a qualsiasi esempio, non solo. Basato su.

+1

Fai attenzione al termine "doppia interfaccia". Anche se l'uso del termine * dual * è ovviamente corretto qui, la frase * doppia interfaccia * è comunemente associata a 'IDispatch' e all'automazione, il che è un po 'confuso (è quello che pensavo riguardasse questa domanda prima di aprirlo). – Aaronaught

risposta

3

Un altro esempio potrebbe essere TextReader e TextWriter, anche se c'è ancora più rumore rispetto al caso di osservabili ed enumerabili. In linea di principio le firme di tipo sarebbero:

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

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

Un altro esempio è il tipo di prodotto AB e il tipo di somma A + B di due tipi A e B. In Haskell si possono scrivere come:

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

controllo here per i dettagli

2

covarianza e controvarianza è anothe esempio. Credo. Potrei sbagliarmi.

Bart De Smet says: "esistono sacco di dualità in varie discipline, che prevede il trasferimento grande conoscenza tra domini diversi, ad esempio, in logica formale, la legge di De Morgan permette di convertire espressioni costruite dal congiunzioni in quelle costruite dal disgiunzioni, e viceversa.. Nell'elettronica esistono similitudini tra il comportamento dei condensatori e le induttanze: conoscerne uno e come andare avanti e indietro tra i domini, e tu conosci l'altro: il calcolo di Fourier fornisce duali tra i domini del tempo e della frequenza. " Interessante.

Chiamano anche System.Reactive il doppio di System.Interactive. Quindi la maggior parte delle funzioni in uno degli assembly ha il doppio nell'altro. Per chiarire, non è solo che IO è il doppio di IE, ma anche le funzioni che operano su di loro sono dualizzate.

Quindi, per rispondere alla tua domanda, esistono molte interfacce dualizzate. Puoi dualizzare qualsiasi interfaccia. Basta scambiare ingressi e uscite e la direzione della funzione. Alcuni non saranno utili o saranno il doppio di se stessi. Tuttavia, a volte ci sono dei potenti che si nascondono in attesa di essere scoperti.

+0

Up-vote per aver citato il blog del grande Bart De Smet. :-D –