
**السلام عليكم ورحمة الله وبركاته**
تحية عطرة لكل رواد المنتدى الكرام وطاقم اشرافه الفاضل ...،

اليوم اتيكم بدرس جديد حول الـ #C لكنه درس متقدم نسبيا ، قررت الابتعاد عن الاساسيات في هذا الدرس تحت طلب بعض الاخوة المتابعين للدورة لكن سنعود للاساسيات في الموضوع القادم ان شاء الله ،
هذا الدرس سيتحدث عن الدالات "الممتدة" او "الملحقة" ان شئتم وهي بالانكليزية extension method .
طيب ، ماهي هذه الدالة المتميّزة واين يمكننا استعمالها او متى بالاحرى ؟
نوعا ما تعريف هذه الدالة يمكن في اسمها "extension" يعني من ذلك نفهم انها امتداد لشيء ما ، طبعا هذا الشيء لايمكن ان يكون غير فئة class ،
للتوضيح اكثر دعنا نتخيل مثال : فرضا انه لدينا فئة معينة (سواء قمنا بتصميمها نحن او شخص اخر) واردنا ان نضيف دالة لهذه الفئة ، طبعا اذا كنا مصممي هذه الفئة بامكاننا فقط اضافة دالة داخلها ،
لكن فرضا اننا لانريد ان نعبث بكود سورس الفئة او اننا لانستطيع اصلا الوصول اليه في حالة شخص اخر قام بتصميمها ، معظمكم هنا سيصنع فئة جديدة ترث الفئة الاصلية ويضع الدالة داخل الفئة الجديدة ....
لكن كما تعلمون بعض الفئات لاتسمح بالميراث ان صح التعبير .
لناخذ مثال حقيقي ، مثلا فئة String ، فرضا اننا نريد اضافة دالة لهذه الفئة لتطويرها و التي بالمناسبة لاتقبل الميراث وبامكانكم التاكد بانفسكم :

اذا مالعمل في هذه الحالة ؟ هنا ياتي درس اليوم ، سنستخدم الدالات الممتدة للقيام بهذه العملية .

الان الى كيفية صناعة هذه الدالة المميزة ،
اولا وقبل الشروع في تعريف هذه الدالة الجديدة وجب التاكد من ان اسم الدالة الذي ستستعمله غير متواجد في فضاء اسماء الفئة التي ستضيف دالتك اليها
سابقى مع مثال فئة String لاضيف لها دالة ، دالتي ستكون بسيطة فقط للتوضيح كيف تصير العملية ، ماستقوم به دالة هو اخذ string واضافة نجمة في البداية و في النهاية
يعني هكذا مثالا :

لكن مااريد التحصل عليه في النهاية هو هذا :

يعني حرفيا اضافة دالتي الى فئة String كما ولو ان مصمم الفئة قام بوضع دالتي عند تصميمه للفئة
الان انظروا الى هذا الكود :

هكذا نقوم بصناعة دالة ممتدة ، فئة جديدة تكون static وداخلها نضع دالتنا طبعا يجب ان تكون static ايضا حتى يتمكن لنا استعمالها من دون صنع كائن جديد من فئة Stars
لكن الكلمة المفتاح فذالك الكود هي وكما اشرت له بالصورة تعليمة this فمن دونها سنعود الى الكود السابق حيث سيتوجب علينا استعمال = ....
الشيء الممتع اكثر هو ان الاكمال الاوتوماتيكي الذي يوفره لنا الـ VS يظهر لنا دالتنا كما ولو انها دالة اساسية في فئة String كما توضحه الصورة التالية :

وطبعا هذا شيء عملي للغاية خاصة اذا كنا سنستعمل هذه الدالة عديد المرات .
وطبعا بصناعة دالة امتداد لفئة معينة صار بامكانها الولوج الى كامل مكونات تلك الفئة يعني حتى المتغيرات الخاصة والمحمية private and protected members
يعني تماما مثل اي دالة موجودة من البداية داخل الفئة ،
لكن طبعا وجب التنويه مجددا لان هذه الدالات وجب ان تكون static داخل فئة static ايضا والا فلن تعمل الطريقة
(بخصوص دور تعليمة static اذا كنت لاتعرف دورها جيدا فقط ضع ردا وساشرحها تمام بالرغم من اني ساعود لشرحها في درس اخر عندما اعود للاساسيات في هذه الدورة)
ايضا دالات الامتداد بامكانها العمل مع الواجهات ايضا Interfaces تمام كما تعمل مع الفئات Class
وطبعا منطقيا اذا قمت باضافة دالة الى واجهة او فئة فان كل فئة ترث تلك الفئة او تستعمل تلك الواجهة سترث الدالة ايضا ،
هذا مثال يوضح كيفية اضافة دالة الى واجهة وكيف ان كل فئة تستعمل تلك الواجهة بامكانها الولوج لدالتنا ايضا :

هنا ينتهي درسنا لكن قبل ان اترككم وجب التنويه انه وجب استعمال دالة ممتدة فقط عندما لايمكننا الولوج الى كود سورس الفئة او عندما لايمكننا ان نصنع فئة جديدة حيث نرث الفئة التي نريد اضافة الدالة اليها

ارجو ان الدرس كان مفيد واذا كان لكم اي استفسار فكلي اذان صاغية ،
كذلك لن تنسوا ان تضعوا ردود او تراسلني بخصوص الدروس المقبلة وماتريد تعلمه حول الـ #C
الى اللقاء في الدرس القادم ،
مع تحياتــــــ ..،
