سؤال

أنا لا أفهم لماذا IList ينفذ IEnumerable مع الأخذ في الاعتبار ذلك IList ينفذ ICollection الذي ينفذ IEnumerable أيضًا.

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

المحلول

وأفترض أنك تريد أن تعرف لماذا تعلن أنها تطبق ICollection وكذلك IEnumerable، عندما أولا يعني الثانية. وأظن أن السبب الرئيسي هو وضوح: يعني الناس ليسوا بحاجة أن ننظر إلى الوراء لICollection للتأكد من أن الذي يمتد بالفعل IEnumerable

.

وهناك أوقات أخرى عندما تحتاج إلى redeclare على تطبيق واجهة، إذا كنت ترغب في إعادة تنفيذ-طريقة اجهة التي تم تنفيذها سابقا صراحة في الفئة الأساسية - ولكن لا أعتقد أن هذا هو السبب في هذه الحالة <. / P>

تحرير: لقد تم افتراض أن التعليمات البرمجية المصدر التي يتم بناؤها مستندات من لديه تصريح بما في ذلك الواجهات. بديل آخر محتمل هو أن <م> جميع الواجهات في التسلسل الهرمي يتم سحبها تلقائيا في قبل مولد الوثيقة وفي هذه الحالة يصبح السؤال "لماذا المولد وثيقة نفعل ذلك." - والجواب هو لا يزال من شبه المؤكد "وضوح"

نصائح أخرى

IList ينفذ فقط IEnumerable بواسطة رابطة.أي.ينفذ IEnumerable بدقة لأن يرث ICollection الذي IEnumerable.ستحصل على الشيء نفسه مع التسلسلات الهرمية للأنواع (على الرغم من الميراث الفردي فقط:

class Enumerable {}
class Collection : Enumerable {}
class List : Collection {}

لذا List هو Enumerable;بنفس الطريقة، IList يكون IEnumerable.

مثلا لو كتبت:

interface IA {}
interface IB : IA { }
interface IC : IB { }

وانظر إلى البيانات الوصفية، فيبدو أن ذلك IC : IA, IB - ولكن هذا غير مباشر فقط؛وهنا إيل:

.class private interface abstract auto ansi IA
{
}
.class private interface abstract auto ansi IB
    implements IA
{
}
.class private interface abstract auto ansi IC
    implements IB, IA
{
}

إذا كنت لفتح رمز في ReSharper، فإنه يشير إلى أن إعلان واجهة IEnumerable على IList لم يكن مطلوبا، ويتم تحديد ذلك بالفعل عبر ICollection.

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