صيغة الوراثة الأساسية (:)
جزء من قسم Object Oriented Programming في رحلة C# على Coddy — الدرس 19 من 70.
يسمح التوريث لفئة باكتساب خصائص وأساليب فئة أخرى. فبدلاً من إعادة كتابة الكود نفسه، تقوم بإنشاء فئة أساسية (أب) ذات وظائف مشتركة، ثم تنشئ فئات مشتقة (أبناء) ترث منها.
في لغة #C، تستخدم رمز النقطتين الرأسيتين : للإشارة إلى الوراثة:
public class Animal
{
public string Name { get; set; }
public void Eat()
{
Console.WriteLine($"{Name} is eating.");
}
}
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine($"{Name} says Woof!");
}
}ترث فئة Dog كل شيء من Animal. ولديها حق الوصول إلى خاصية Name ودالة Eat() دون الحاجة إلى التصريح عنهما مرة أخرى، بالإضافة إلى أنها تضيف دالة Bark() الخاصة بها:
Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat(); // الناتج: Buddy is eating.
myDog.Bark(); // الناتج: Buddy says Woof!يدعم C# الوراثة الفردية فقط، مما يعني أن class يمكنها الوراثة من base class واحدة فقط. ومع ذلك، يمكنك بناء سلاسل وراثة حيث تصبح derived class أساساً لفئة أخرى. يؤدي هذا إلى إنشاء تسلسل هرمي ينمذج علاقات العالم الحقيقي مع الحفاظ على الكود الخاص بك منظماً وقابلاً لإعادة الاستخدام.
التحدي
سهلدعونا نبني تسلسلاً هرمياً للمركبات يوضح كيف تسمح الوراثة للفئات المشتقة بمشاركة الوظائف من فئة أساسية مع إضافة سلوكياتها الفريدة الخاصة.
ستقوم بإنشاء ثلاثة ملفات لتنظيم الكود الخاص بك:
Vehicle.cs: قم بتعريف فئةVehicleفي مساحة الأسماءTransport. ستكون هذه هي الفئة الأساسية التي تشترك فيها جميع المركبات. يجب أن تحتوي على خاصيةBrand(string) وخاصيةYear(int)، بالإضافة إلى طريقةStartEngine()التي تطبع"{Brand} engine started."Car.cs: قم بتعريف فئةCarفي مساحة الأسماءTransportالتي ترث منVehicle. تضيف السيارة خاصيتها الخاصةNumberOfDoors(int) وطريقةHonk()التي تطبع"{Brand} goes Beep Beep!"Program.cs: في ملفك الرئيسي، قم بإنشاء مثيل (instance) منCarباستخدام قيم الإدخال. قم بتعيين خصائصه (بما في ذلك الخصائص الموروثة)، ثم أثبت أن السيارة يمكنها استخدام طرقها الخاصة والطرق التي ورثتها منVehicle.
ستتلقى ثلاثة مدخلات:
- اسم العلامة التجارية (Brand name)
- السنة (Year)
- عدد الأبواب (Number of doors)
اطبع معلومات السيارة واستعرض قدراتها بهذا التنسيق:
Car: {Brand} ({Year})
Doors: {NumberOfDoors}
{StartEngine output}
{Honk output}على سبيل المثال، إذا كانت المدخلات هي Toyota، و 2022، و 4، يجب أن يكون المخرج:
Car: Toyota (2022)
Doors: 4
Toyota engine started.
Toyota goes Beep Beep!لاحظ كيف يمكن لـ Car الوصول إلى خاصية Brand وطريقة StartEngine() على الرغم من أنهما محددتان في Vehicle. هذه هي قوة الوراثة - تحصل الفئة المشتقة تلقائياً على كل شيء من فئتها الأساسية!
ورقة مرجعية
تسمح الوراثة لفئة باكتساب الخصائص والأساليب من فئة أخرى باستخدام رمز النقطتين الرأسيتين ::
public class Animal
{
public string Name { get; set; }
public void Eat()
{
Console.WriteLine($"{Name} is eating.");
}
}
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine($"{Name} says Woof!");
}
}ترث الفئة المشتقة (Dog) جميع الخصائص والأساليب من الفئة الأساسية (Animal) ويمكنها إضافة خصائصها وأساليبها الخاصة:
Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat(); // Inherited method
myDog.Bark(); // Own methodتدعم لغة C# الوراثة الفردية فقط - حيث يمكن للفئة أن ترث من فئة أساسية واحدة فقط. ومع ذلك، يمكنك إنشاء سلاسل وراثة لبناء هياكل هرمية.
جرّب بنفسك
using System;
using Transport;
class Program
{
public static void Main(string[] args)
{
// قراءة المدخلات
string brand = Console.ReadLine();
int year = Convert.ToInt32(Console.ReadLine());
int doors = Convert.ToInt32(Console.ReadLine());
// TODO: إنشاء مثيل من Car
// TODO: تعيين خصائص السيارة (Brand، Year، NumberOfDoors)
// TODO: طباعة معلومات السيارة بالتنسيق المطلوب:
// Car: {Brand} ({Year})
// Doors: {NumberOfDoors}
// ثم استدعاء StartEngine() و Honk()
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس 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