منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : الدرس الثاني والعشرون - ال polymorphism
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
كاتب الموضوع : أحمد جمال

بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .

عد بداية للدرس السابع عشر للتعرف على المبدأ العام لل polymorphism

التعريف الماضي والذي يسمح لك بتعريف class بدون اي implementation ، يوفر لك ايضاً كتابة كود ولكن في المقابل يسمح لك بتغيير ال implementation الخاص بالدالة بين الكلاس والآخر ، وهو ما يعرف باسم Overridding .

لنفترض مثال السيارة الخاص بنا ، لو افترضنا وجود الدالة التالية الخاصة بحساب المسافة المتبقية للسيارة قبل ان ينفد البنزين ، وحيث ان السيارة (مثلاً) تصرف جالوناً لكل 10 كيلومتر .
c#:

كود :
public int calc(int fuel)
{
return fuel * 10;
}
vb.net:


كود :
Public Function calc(ByVal fuel As Integer) As Integer

Return fuel * 10

End Function
ولكن بعد عملنا للسيارة BMW اكتشفنا ان هذه السيارة لا تسير على نفس القاعدة ، إذ انها تصرف جالوناً لكل 5 كيلومترات فقط ، في هذه الحالة نحن بحاجة إلى اعادة تعريف الدالة calc في الكلاس المشتق ، هذا هو ما يعرف باسم اعادة القيادة Overridding وهو احد مبادئ ال polymorphism . يتم ذلك عن طريق تعريف الدالة الاساسية في ال base class من نوع virtual بالشكل التالي :


c#:

كود :
public virtual int calc(int fuel)
{
return fuel * 10;
}
vb.net:


كود :
Public Overridable Function calc(ByVal fuel As Integer) As Integer

Return fuel * 10

End Function
ال virtual او ال overriddeable تعني ان هذه الدالة يمكن اعادة تعريفها في الكلاس المشتق ، كما يمكن عدم تعريفها ايضاً ، لاعادة تعريفها نكتب الكود التالي في الكلاس المشتق :

c#:


كود :
public override int calc(int fuel)
{
return fuel * 5;
}
vb.net:


كود :
Public Overloads Overrides Function calc(ByVal fuel As Integer) As Integer

Return fuel * 5

End Function
ايضاً يمكنك ترك ال implementation فارغاً في الكلاس الرئيسي ومن ثم قم ببرمجته في الكلاسات الأبناء ، يعرف الكلاس الفارغ من ال implementation باسم Abstract class وهو غير ال interface الذي سنتعرف عليه في مرحلة قادمة .