有用或非平凡双界面的例子

11

最近,Erik Meijer和其他人展示了IObservable/IObserverIEnumerable/IEnumerator对偶。它们是对偶的事实意味着任何一个接口上的操作在另一个接口上都是有效的,因此为Reactive Extentions for .Net提供了理论基础。

是否存在其他对偶接口?我对任何例子都感兴趣,不仅仅是基于.Net的。


1
小心使用“双重接口”这个术语。虽然在这里使用“双重”这个词显然是正确的,但是“双重接口”这个短语通常与IDispatch和自动化相关联,这有点令人困惑(这就是我在打开这个问题之前所想的)。 - Aaronaught
3个回答

3

另一个例子是TextReaderTextWriter,尽管与可观察对象和可枚举对象相比,噪声更多。原则上,类型签名应该是:

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

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

3
另一个例子是产品类型A.B和两种类型A和B的总和类型A+B。在Haskell中,您可以将它们写成: data Prod a b = P a b -- 这与对偶类型(a,b)相同 data Sum a b = Left a | Right b -- 与Either a b类型相同 详情请查看这里

2
协变和逆变是另一个例子。我想是这样。我可能错了。
Bart De Smet说:“各种学科中存在许多二元性,为不同领域之间的知识转移提供了巨大的帮助。例如,在形式逻辑中,德摩根定律允许将从联结词构建的表达式转换为从析取构建的表达式,反之亦然。在电子学中,电容器和电感的行为存在相似之处:了解其中一个并且如何在两个领域之间来回切换,你就会了解另一个。傅里叶微积分提供了时间和频率域之间的二元性。”有趣。
他们还称System.Reactive是System.Interactive的对偶。因此,一个程序集中的大多数函数都在另一个程序集中具有其对偶。为了澄清,不仅IO是IE的对偶,而且操作它们的函数也被二元化了。
所以回答你的问题,存在许多二元接口。您可以使任何接口成为对偶接口。您只需交换输入和输出以及功能的方向即可。有些可能没有用,或者是它们自己的对偶。但是,有时候会有真正强大的隐藏在那里等待被发掘。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接