Вопрос

Недавно Эрик Мейер и другие показали, как IObservable/IObserver является ли двойной из IEnumerable/IEnumerator.Тот факт, что они являются двойственными, означает, что любая операция на одном интерфейсе действительна на другом, обеспечивая тем самым теоретическую основу для Реактивные расширения для .Net

Существуют ли другие двойные интерфейсы?Меня интересует любой пример, а не только .Основанный на сети.

Это было полезно?

Решение

Другим примером может быть TextReader и TextWriter, хотя шума здесь еще больше, чем в случае с наблюдаемыми и перечислимыми.В принципе , сигнатуры типов были бы:

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

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

Другие советы

Другим примером является тип продукта A.B и тип суммы A + B двух типов A и B.В Haskell вы можете записать их как:

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

проверить здесь для получения подробной информации

Ковариация и контравариантность - это еще один пример.Я думаю.Я могу ошибаться.

Барт Де Смет говорит:"В различных дисциплинах существует множество двойственностей, обеспечивающих отличную передачу знаний между различными областями.Например, в формальной логике закон Де Моргана позволяет преобразовывать выражения, построенные из союзов, в выражения, построенные из дизъюнкций, и наоборот.В электронике существует сходство между поведением конденсаторов и индуктивностей:знайте одно и как перемещаться туда-сюда между доменами, и вы знаете другое.Исчисление Фурье обеспечивает двойственность между временной и частотной областями ". Интересно.

Они также называют систему.Реактивная двойственность системы.Интерактивная.Таким образом, большинство функций в одной из сборок имеют двойственную функцию в другой.Чтобы уточнить, дело не только в том, что IO является двойственным IE, но и в том, что функции, которые работают с ними, также дуализированы.

Итак, чтобы ответить на ваш вопрос, существует множество двойственных интерфейсов.Вы можете дублировать любой интерфейс.Вы просто меняете местами входы и выходы и направление функции.Некоторые из них не будут полезны или будут двойственны сами по себе.Однако иногда есть действительно могущественные существа, которые прячутся, ожидая, когда их раскроют.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top