C# الوراثة وتعدد الأشكال مع أمثلة البرنامج
⚡ ملخص ذكي
يُعدّ كلٌّ من التوريث وتعدد الأشكال في لغة C# مبدأين أساسيين في البرمجة الكائنية. يسمح التوريث للفئة الفرعية بإعادة استخدام الحقول والأساليب الخاصة بالفئة الأصلية، بينما يسمح تعدد الأشكال لاسم الأسلوب الواحد باتخاذ أشكال متعددة.

ما هو الوراثة في C #؟
وراثة هو مفهوم مهم لـ C#. الميراث هو مفهوم تحدد فيه الفئات الأصلية والفئات الفرعية. ترث الفئات الفرعية أساليب وخصائص الفئة الأصلية، ولكن في الوقت نفسه، يمكنها أيضًا تعديل سلوك الأساليب إذا لزم الأمر. يمكن للفئة الفرعية أيضًا تحديد طرق خاصة بها إذا لزم الأمر.
دعونا نحصل على فهم أفضل لوراثة C# من خلال مثال برنامج:
مثال على الوراثة في لغة C#
دعونا نرى الآن كيف يمكننا دمج مفهوم الميراث في الكود الخاص بنا.
الخطوة 1) الخطوة الأولى هي تغيير الكود الخاص بفصلنا التعليمي. في هذه الخطوة، نضيف الكود أدناه إلى ملف Tutorial.cs.
لاحظ أننا نحتاج الآن إلى إضافة معدّل الوصول "محمي" إلى حقلي TutorialID وTutorialName.
تذكر أننا ذكرنا مُعدِّل الوصول هذا في شرح مُعدِّل الوصولحسنًا، هنا يمكنك أن ترى الغرض من وجود هذا. فقط عندما يكون لديك مُعدِّل الوصول هذا (محمي)، ستتمكن الفئة الفرعية من استخدام حقول الفئة الأصلية.
الخطوة 2) الخطوة الثانية هي إضافة فئة فرعية جديدة. سيكون اسم هذه الفئة "Guruفي هذه الخطوة، نضيف الكود التالي إلى ملف Tutorial.cs. يجب وضع الكود بعد تعريف فئة Tutorial.
Code تفسير:-
- الخطوة الأولى هي إنشاء Guruفئة فرعية من فئة 99Tutorial. تجدر الإشارة أيضًا إلى أن هذه الفئة ستكون فئة فرعية من فئة Tutorial. ويتم ذلك باستخدام الكلمة المفتاحية ":".
- بعد ذلك، نقوم بتعريف طريقة تسمى RenameTutorial. سيتم استخدامه لإعادة تسمية حقل TutorialName. تقبل هذه الطريقة متغير سلسلة يحتوي على الاسم الجديد للبرنامج التعليمي.
- قمنا بعد ذلك بتعيين المعلمة pNewName إلى حقل TutorialName. ملاحظاتعلى الرغم من أننا لم نحدد حقل TutorialName في "Guruفي فصل "99Tutorial"، لا يزال بإمكاننا الوصول إلى هذا الحقل. هذا بسبب حقيقة أن "Guru"99Tutorial" هي فئة فرعية من فئة Tutorial. ولأننا جعلنا حقول فئة Tutorial محمية، يمكن الوصول إليها من هذه الفئة.
الخطوة 3) الخطوة الأخيرة هي تعديل ملف Program.cs الرئيسي. في تطبيق وحدة التحكم الخاص بنا، سنقوم بإنشاء كائن من Guruفئة 99Tutorial. باستخدام هذا الكائن، سنستدعي دالة RenameTutorial. ثم سنعرض حقل TutorialName باستخدام دالة GetTutorial.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { public class Tutorial { protected int TutorialID; protected string TutorialName; public void SetTutorial(int pID,string pName) { TutorialID=pID; TutorialName=pName; } public String GetTutorial() { return TutorialName; } } public class Guru99Tutorial:Tutorial { public void RenameTutorial(String pNewName) { TutorialName=pNewName; } static void Main(string[] args) { Guru99Tutorial pTutor=new Guru99Tutorial(); pTutor.RenameTutorial(".Net by Guru99"); Console.WriteLine(pTutor.GetTutorial()); Console.ReadKey(); } } }
Code تفسير:-
- الخطوة الأولى هي إنشاء كائن لـ Guruفئة 99Tutorial. يتم ذلك باستخدام الكلمة المفتاحية 'new'. لاحظ أننا هذه المرة لا نقوم بإنشاء كائن من فئة Tutorial.
- نستخدم طريقة RenameTutorial الخاصة بـ Guruنستخدم فئة 99Tutorial لتغيير حقل TutorialName. نمرر السلسلة ".Net بواسطة Guru99" إلى طريقة RenameTutorial.
- ثم نستدعي دالة GetTutorial. لاحظ أنه على الرغم من أن هذه الدالة غير مُعرَّفة في Guruفي فئة 99Tutorial، لا يزال بإمكاننا الوصول إلى هذه الطريقة. ثم يتم عرض مخرجات طريقة GetTutorial في وحدة التحكم عبر طريقة Console.WriteLine.
إذا تم إدخال الكود أعلاه بشكل صحيح وتم تنفيذ البرنامج بنجاح، سيتم عرض الإخراج التالي.
الإخراج:
من المخرجات، يمكننا أن نرى بوضوح أن حقل TutorialName قد أعيد تسميته إلى ".Net بواسطة Guru99". وقد أصبح هذا ممكناً بفضل طريقة RenameTutorial التي تم استدعاؤها بواسطة الفئة الفرعية.
ما هو تعدد الأشكال في C#؟
تعدد الأشكال in C# يُعدّ مفهوم تعدد الأشكال أحد مفاهيم البرمجة الكائنية، حيث يمكن أن يتخذ الاسم الواحد أشكالًا متعددة. على سبيل المثال، لديك هاتف ذكي للتواصل. يمكن أن تكون طريقة التواصل التي تختارها أي شيء، سواءً أكانت مكالمة هاتفية، أو رسالة نصية، أو رسالة مصورة، أو بريدًا إلكترونيًا، وما إلى ذلك. إذن، الهدف واحد، وهو التواصل، لكن أساليب التواصل تختلف. وهذا ما يُسمى بتعدد الأشكال.
سوف تحصل على فهم أفضل لتعدد أشكال C# من خلال مثال البرنامج التالي:
مثال على تعدد الأشكال في لغة C#
دعونا نرى الآن كيف يمكننا دمج مفهوم تعدد الأشكال في الكود الخاص بنا.
الخطوة 1) الخطوة الأولى هي تغيير الكود الخاص بفصلنا التعليمي. في هذه الخطوة، نضيف الكود أدناه إلى ملف Tutorial.cs.
Code تفسير:-
1 و2) الخطوة الأولى هي نفسها كما في أمثلتنا السابقة. نحن نحافظping تعريف طريقة SetTutorial كما هي.
3) تقوم هذه الطريقة بتعيين TutorialID وTutorialName بناءً على المعلمات pID وpName.
4) هذا هو المكان الذي نجري فيه تغييرًا على فصلنا حيث نضيف طريقة جديدة بنفس اسم SetTutorial. هذه المرة فقط نقوم بتمرير معلمة واحدة فقط وهي pName. في هذه الطريقة، نقوم فقط بتعيين حقل TutorialName إلى pName.
الخطوة 2) الخطوة الأخيرة هي تعديل ملف Program.cs الرئيسي. في تطبيق وحدة التحكم الخاص بنا، سنقوم بإنشاء كائن من Guru99Tutorial class.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Tutorial { public int TutorialID; public string TutorialName; public void SetTutorial(int pID,string pName) { TutorialID=pID; TutorialName=pName; } public void SetTutorial(string pName) { TutorialName=pName; } public String GetTutorial() { return TutorialName; } static void Main(string[] args) { Tutorial pTutor=new Tutorial(); pTutor.SetTutorial(1,"First Tutorial"); Console.WriteLine(pTutor.GetTutorial()); pTutor.SetTutorial("Second Tutorial"); Console.WriteLine(pTutor.GetTutorial()); Console.ReadKey(); } } }
Code تفسير:-
- في الخطوة الأولى، نستخدم طريقة SetTutorial مع معلمتين. حيث نقوم بتمرير كل من TutorialID و TutorialName إلى هذه الطريقة.
- في الخطوة الثانية، نقوم الآن باستدعاء الأسلوب SetTutorial بمعلمة واحدة فقط. نحن نقوم فقط بتمرير اسم البرنامج التعليمي إلى هذه الطريقة.
إذا تم إدخال الكود أعلاه بشكل صحيح وتم تشغيل البرنامج، فسيتم عرض الناتج التالي. إذا كنت تريد أيضًا جلب معرف البرنامج التعليمي مع اسم البرنامج التعليمي، فيجب عليك اتباع الخطوة التالية
- قم بإنشاء طريقة منفصلة تسمى GetTutorialID العام
- في هذه الطريقة، اكتب سطر التعليمات البرمجية "return TutorialID". يمكن استخدام هذا لإعادة TutorialID إلى برنامج الاستدعاء.
الإخراج:
من المخرجات، يمكننا أن نرى بوضوح أن كلا الطريقتين تم استدعاؤهما بنجاح. ولهذا السبب، تم إرسال السلاسل "البرنامج التعليمي الأول" و"البرنامج التعليمي الثاني" إلى وحدة التحكم.







