ملخص - Custom List
جزء من قسم Object Oriented Programming في رحلة C# على Coddy — الدرس 40 من 70.
التحدي
سهللنقم ببناء فئة CustomList تجمع بين جميع الميزات المتقدمة من هذا الفصل - تحميل عامل التشغيل الزائد (operator overloading)، والمفهرسات (indexers)، وتجاوز ToString()، وطرق التوسيع (extension methods) - لإنشاء مجموعة تبدو طبيعية وبديهية في الاستخدام.
ستقوم بتنظيم الكود الخاص بك عبر ثلاثة ملفات:
CustomList.cs: أنشئ فئةCustomListفي مساحة الأسماءCollectionsوالتي تغلف مصفوفة صحيحة داخلية وتوفر أنماط وصول بديهية. يجب أن تحتوي قائمتك على:- مصفوفة صحيحة خاصة لتخزين العناصر وخاصية
Count(مع تعيين خاص private setter) لتتبع عدد العناصر المخزنة. - منشئ (constructor) يقبل السعة (عدد صحيح) ويهيئ المصفوفة الداخلية بهذا الحجم.
- طريقة
Add(int item)تضيف عنصراً إلى الموضع المتاح التالي (إذا كانت هناك مساحة). - مفهرس
this[int index]يسمح بالحصول على العناصر وتعيينها حسب الموضع. - عامل تشغيل
+محمل بشكل زائد يجمع بين قائمتي CustomLists في قائمة جديدة تحتوي على جميع العناصر من كلتيهما (يجب أن تكون سعة القائمة الجديدة هي مجموع عدد عناصر القائمتين). - طريقة
ToString()متجاوزة تعيد العناصر بتنسيق[item1, item2, item3]- قم بتضمين العناصر حتىCountفقط، وليس المواضع الفارغة.
- مصفوفة صحيحة خاصة لتخزين العناصر وخاصية
ListExtensions.cs: أنشئ فئة ثابتةListExtensionsفي مساحة الأسماءCollectionsمع طريقة توسيع لـ CustomList الخاصة بك:Sum()- تعيد مجموع جميع العناصر في القائمة (حتىCount).
Program.cs: في ملفك الرئيسي، أنشئ قائمتي CustomLists، وأضف عناصر إلى كل منهما، ثم استعرض جميع الميزات وهي تعمل معاً - استخدم المفهرس للوصول إلى العناصر، واجمع القوائم باستخدام عامل التشغيل+، واطبع باستخدامToString()، واحسب المجموع باستخدام طريقة التوسيع الخاصة بك.
ستتلقى ستة مدخلات:
- ثلاثة أعداد صحيحة لإضافتها إلى القائمة الأولى.
- ثلاثة أعداد صحيحة لإضافتها إلى القائمة الثانية.
أنشئ القائمة الأولى بسعة 5 والثانية بسعة 3. أضف قيم المدخلات الثلاثة إلى كل قائمة على حدة.
اطبع المخرجات بهذا التنسيق:
List 1: {ToString()}
List 2: {ToString()}
List 1[0]: {first item}
Combined: {ToString() of combined list}
Combined sum: {Sum()}على سبيل المثال، إذا كانت المدخلات هي 10، 20، 30، 5، 15، و 25، يجب أن تكون المخرجات:
List 1: [10, 20, 30]
List 2: [5, 15, 25]
List 1[0]: 10
Combined: [10, 20, 30, 5, 15, 25]
Combined sum: 105لاحظ كيف تعمل جميع القطع معاً - يمنحك المفهرس وصولاً يشبه المصفوفة، ويتيح لك عامل التشغيل + دمج القوائم بشكل طبيعي، ويوفر ToString() مخرجات قابلة للقراءة، وتضيف طريقة التوسيع وظائف مفيدة. هذا هو شعور الفئات المصممة جيداً!
جرّب بنفسك
using System;
using Collections;
class Program
{
public static void Main(string[] args)
{
// قراءة ستة أعداد صحيحة
int a1 = Convert.ToInt32(Console.ReadLine());
int a2 = Convert.ToInt32(Console.ReadLine());
int a3 = Convert.ToInt32(Console.ReadLine());
int b1 = Convert.ToInt32(Console.ReadLine());
int b2 = Convert.ToInt32(Console.ReadLine());
int b3 = Convert.ToInt32(Console.ReadLine());
// TODO: إنشاء أول CustomList بسعة 5
// TODO: إضافة a1، a2، a3 إلى القائمة الأولى
// TODO: إنشاء ثاني CustomList بسعة 3
// TODO: إضافة b1، b2، b3 إلى القائمة الثانية
// TODO: طباعة List 1 باستخدام ToString()
// TODO: طباعة List 2 باستخدام ToString()
// TODO: طباعة List 1[0] باستخدام الـ indexer
// TODO: دمج القوائم باستخدام معامل + وطباعة النتيجة
// TODO: طباعة مجموع القائمة المدمجة باستخدام طريقة التوسيع Sum()
}
}
جميع دروس Object Oriented Programming
1أساسيات OOP
الملفات الخارجيةNamespaces والتوجيهاتمقدمة في Classes و Objectsالكلمة المفتاحية 'this'Methods والمعاملاتFields مقابل PropertiesConstructorsObject Initializersمراجعة - آلة حاسبة بسيطة4الوراثة
صيغة الوراثة الأساسية (:)الكلمة المفتاحية 'base'الكلمات المفتاحية Virtual و Overrideالأصناف المختومة (Sealed Classes)الفئة الأساسية 'object'مراجعة - هيكلية الموظفين7ميزات متقدمة
تحميل العوامل (Operator Overloading)المفهرسات (Indexers (this[]))إعادة تعريف ()ToStringدوال التوسعة (Extension Methods)ملخص - Custom List2الخصائص والأعضاء الساكنة (Static Members)
الخصائص المطبقة تلقائيًا (Auto-Implemented Properties)خصائص القراءة فقط والكتابة فقطالحقول والدوال الساكنة (Static)الفئات الساكنة (Static Classes)الأعضاء ذات البنية التعبيرية (Expression-Bodied Members)5تعدد الأشكال والواجهات (Polymorphism & Interfaces)
تعدد الأشكال: وقت التجميع مقابل وقت التشغيلالواجهة مقابل الفئة المجردة (Abstract Class)الواجهات المتعددةالواجهات الصريحةUpcasting و Downcastingملخص - حاسبة الأشكال8مفاهيم البرمجة كائنية التوجه (OOP) المتقدمة
التركيب بدلاً من الوراثةالـ Generics (الأصناف والدوال)الـ Delegates والأحداثالـ Attributes والـ Reflectionواجهة IDisposable وجملة usingأساسيات Dependency Injection