Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

صيغة الوراثة الأساسية (:)

جزء من قسم 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 أساساً لفئة أخرى. يؤدي هذا إلى إنشاء تسلسل هرمي ينمذج علاقات العالم الحقيقي مع الحفاظ على الكود الخاص بك منظماً وقابلاً لإعادة الاستخدام.

challenge icon

التحدي

سهل

دعونا نبني تسلسلاً هرمياً للمركبات يوضح كيف تسمح الوراثة للفئات المشتقة بمشاركة الوظائف من فئة أساسية مع إضافة سلوكياتها الفريدة الخاصة.

ستقوم بإنشاء ثلاثة ملفات لتنظيم الكود الخاص بك:

  • 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()
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming