سؤال

في الآونة الأخيرة ، أظهر Erik Meijer وآخرون كيف IObservable/IObserver هل مزدوج من IEnumerable/IEnumerator. حقيقة أنها مزدوجة تعني أن أي عملية على واجهة واحدة صالحة من جهة أخرى ، وبالتالي توفير أساس نظري ل المدى التفاعلي لـ .NET

هل توجد واجهات مزدوجة أخرى؟ أنا مهتم بأي مثال ، وليس فقط .NET.

هل كانت مفيدة؟

المحلول

مثال آخر سيكون TextReader و TextWriter, ، على الرغم من وجود ضوضاء أكثر مما هو الحال في حالة الملاحظات والمواد الموضحة. من حيث المبدأ ، ستكون توقيعات النوع:

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

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

نصائح أخرى

مثال آخر هو نوع المنتج AB والنوع المبلغ 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

التحقق من هنا للتفاصيل

التغاير والانتهاك هو مثال آخر. أظن. قد أكون مخطئا.

يقول بارت دي سميت: "توجد الكثير من الثنائيات في مختلف التخصصات ، وتوفير عمليات نقل المعرفة الرائعة بين المجالات المختلفة. على سبيل المثال ، في المنطق الرسمي ، يسمح قانون De Morgan بتحويل التعبيرات المصممة من التزامن إلى تلك المبنية من الانفصال ، والعكس بالعكس. في الإلكترونيات ، توجد أوجه التشابه. بين سلوك المكثفات والمحازية: تعرف على أحد وكيفية العودة ذهابًا وإيابًا بين المجالات ، وأنت تعرف الآخر. مثير للاهتمام.

كما يطلقون على System.Reactive مزدوج النظام. لذلك فإن معظم الوظائف في إحدى التجميعات لديها مزدوجة في الآخر. للتوضيح ، ليس فقط أن IO هو مزدوج IE ، ولكن الوظائف التي تعمل عليها مزدوجة أيضًا.

للإجابة على سؤالك ، توجد العديد من الواجهات المزدوجة. يمكنك ثنائي أي واجهة. يمكنك فقط تبديل المدخلات والمخرجات واتجاه الوظيفة. لن يكون البعض مفيدًا ، أو سيكون مزدوجًا لأنفسهم. ومع ذلك ، في بعض الأحيان هناك تلك القوية المختبئة في انتظار الكشف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top