يمكنني أن أجعل فئة (الثابتة) القائمة على تنفيذ واجهة جديدة؟

StackOverflow https://stackoverflow.com/questions/1632970

  •  06-07-2019
  •  | 
  •  

سؤال

ولدي شعور أنني أعرف الجواب مسبقا الناس سوف تعطي، ولكن هنا يذهب على أي حال:

ويقول أنا أكتب فئة جديدة، دعنا نسميها PooledQueue<T>، في منشئ التي أريد لقبول حجة التي تطبق IResourcePool<T> اجهة. والفكرة هنا هي أن أنا بخير مع استخدام أي كائن تجمع الأساسي، طالما انه يعطيني خصائص / أساليب IResourcePool<T> (تعلمون، فإن الفكرة كلها وراء واجهات، أليس كذلك؟).

ولكن إذا كان هناك <م> بالفعل فئة المتاحة التي توفر جميع وظائف IResourcePool<T>، إلا أنه لا <م> تنفيذ IResourcePool<T> (وأنا لا يمكن تعديل الشفرة المصدرية )، هل هناك أي وسيلة بالنسبة لي لإجبار التنفيذ؟

وماذا أتوقع من الناس للرد هو أنني ينبغي أن مجرد غلاف لفئة القائمة التي لم تنفذ واجهة اللازمة. ولكن أريد فقط تفضل أن تكون قادرة على القيام بذلك:

// GetDataPool returns an object of type Pool<Data> that I can't modify
var q = new PooledQueue<Data>(GetDataPool());

وبدلا من هذا:

var q = new PooledQueue<Data>(new PoolWrapper<Data>(GetDataPool()));

وأعتقد أن ما أشعر سيكون من المفيد حقا هو ما إذا يمكن تعريف تنفيذ فئة من واجهة منفصلة عن تعريف الفئة. نوع من الطريقة التي يتم structued قاعدة بيانات مصممة تصميما جيدا - مع الجداول رابطة تربط الكيانات مع معرفات من جداول أخرى. هل هذا يعقل؟

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

المحلول

ومن خارج منطقة الجزاء، لا يمكنك فرض واجهة على فئة دون وراثة منه.

وهناك طرق، مثل استخدام الشفافية <لأ href = "http://msdn.microsoft.com/en-us/library/system.runtime.remoting.proxies.realproxy.aspx" يختلط = "نوفولو noreferrer "> RealProxy أو 3rd الطرف-المكتبات مثل LinFU ، والتي تسمح لك لمحاكاة مثل هذه الاشياء، ولكن بتكلفة أعلى من صنع فئة المجمع الخاص بك.

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

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