Avatar ·

لماذا لا ينبغي توريث صفك من List<T> في C#؟

مرحباً بالجميع! أنا مطور C# مبتدئ وواجهت مشكلة في التصميم. أقوم بكتابة تطبيق لإدارة مكتبة. لدي صف `Book` (كتاب) وأريد إنشاء صف `Library` يحتوي على قائمة من الكتب، بالإضافة إلى أساليبه الخاصة، مثل `FindByAuthor()` أو `GetTotalPages()`. في البداية، اعتقدت أن الأكثر منطقية هو ببساطة الوراثة من `List`: ```csharp public class Library : List { public List FindByAuthor(string author) { return this.Where(b => b.Author == author).ToList(); } public int GetTotalPages() { return this.Sum(b => b.Pages); } } ``` يبدو أن كل شيء يعمل، لكنني قرأت على Stack Overflow أن هذه ممارسة سيئة. يكتب الناس أن "لا ينبغي الوراثة من List". لكنني لا أفهم تماماً لماذا؟ فهذا مريح جداً - تحصل فوراً على جميع أساليب القائمة (Add, Remove, المفهرس، إلخ). يصبح كودي قصيراً وجميلاً. هل يمكنكم شرح بالأمثلة لماذا هذا سيء؟