أمثلة على الواجهات المزدوجة المفيدة أو غير المفيدة
سؤال
في الآونة الأخيرة ، أظهر 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 ، ولكن الوظائف التي تعمل عليها مزدوجة أيضًا.
للإجابة على سؤالك ، توجد العديد من الواجهات المزدوجة. يمكنك ثنائي أي واجهة. يمكنك فقط تبديل المدخلات والمخرجات واتجاه الوظيفة. لن يكون البعض مفيدًا ، أو سيكون مزدوجًا لأنفسهم. ومع ذلك ، في بعض الأحيان هناك تلك القوية المختبئة في انتظار الكشف.