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

الكلمة المفتاحية 'base'

جزء من قسم Object Oriented Programming في رحلة C# على Coddy — الدرس 20 من 70.

عندما ترث فئة مشتقة من فئة أساسية، فغالباً ما تحتاج إلى الوصول إلى أعضاء الفئة الأب بشكل مباشر. توفر الكلمة المفتاحية base هذا الاتصال، مما يسمح لك باستدعاء منشئ الفئة الأساسية أو الوصول إلى أساليبها وخصائصها.

الاستخدام الأكثر شيوعًا لـ base هو استدعاء منشئ الفئة الأب (constructor). عند إنشاء كائن مشتق، يمكنك تمرير القيم إلى الفئة الأساسية:

public class Animal
{
    public string Name { get; set; }
    
    public Animal(string name)
    {
        Name = name;
    }
}

public class Dog : Animal
{
    public string Breed { get; set; }
    
    public Dog(string name, string breed) : base(name)
    {
        Breed = breed;
    }
}

يقوم بناء الجملة : base(name) باستدعاء مُنشئ Animal قبل تشغيل جسم مُنشئ Dog. يضمن ذلك تهيئة الفئة الأساسية بشكل صحيح أولاً.

يمكنك أيضاً استخدام base لاستدعاء دوال الفئة الأساسية من داخل الفئة المشتقة:

public class Animal
{
    public void Speak()
    {
        Console.WriteLine("Animal sound");
    }
}

public class Dog : Animal
{
    public void Speak()
    {
        base.Speak();  // يستدعي Speak الخاصة بـ Animal
        Console.WriteLine("Woof!");
    }
}

هنا، يستدعي base.Speak() صراحةً إصدار الفئة الأساسية (parent) من الدالة. هذا مفيد عندما تريد توسيع سلوك الفئة الأساسية بدلاً من استبداله بالكامل.

challenge icon

التحدي

سهل

لنقم ببناء نظام مخزون منتجات يوضح كيفية استخدام الفئات المشتقة (derived classes) للكلمة المفتاحية base لتهيئة الفئة الأب بشكل صحيح وتوسيع السلوك الموروث.

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

  • Product.cs: قم بتعريف فئة Product داخل مساحة الأسماء Inventory. تمثل هذه الفئة الأساسية أي منتج له خاصية Name (string) وخاصية Price (decimal). قم بتضمين منشئ (constructor) يقبل كلتا القيمتين، وطريقة GetInfo() التي تعيد "{Name}: ${Price}".
  • ElectronicProduct.cs: قم بتعريف فئة ElectronicProduct داخل مساحة الأسماء Inventory والتي ترث من Product. تضيف هذه الفئة خاصية WarrantyMonths (int). يجب أن يقبل المنشئ الاسم والسعر وأشهر الضمان - استخدم base لتمرير الاسم والسعر إلى منشئ الفئة الأب. قم بإنشاء طريقة GetInfo() تستدعي أولاً GetInfo() الخاصة بالفئة الأب باستخدام base، ثم تلحق بها " (Warranty: {WarrantyMonths} months)" لتوسيع المخرجات.
  • Program.cs: في ملفك الرئيسي، قم بإنشاء ElectronicProduct باستخدام قيم الإدخال واعرض معلوماته الكاملة عن طريق استدعاء GetInfo().

ستتلقى ثلاثة مدخلات:

  • اسم المنتج
  • السعر
  • أشهر الضمان

اطبع نتيجة استدعاء GetInfo() على منتجك الإلكتروني.

على سبيل المثال، إذا كانت المدخلات هي Laptop و 999.99 و 24، يجب أن تكون المخرجات:

Laptop: $999.99 (Warranty: 24 months)

لاحظ كيف تبني الفئة المشتقة على مخرجات الفئة الأساسية بدلاً من تكرار المنطق. تتيح لك الكلمة المفتاحية base إعادة استخدام وتوسيع سلوك الفئة الأب بسلاسة!

ورقة مرجعية

تسمح الكلمة الأساسية base للفئة المشتقة بالوصول إلى أعضاء الفئة الأب الخاصة بها.

استخدم base لاستدعاء منشئ الفئة الأب:

public class Animal
{
    public string Name { get; set; }
    
    public Animal(string name)
    {
        Name = name;
    }
}

public class Dog : Animal
{
    public string Breed { get; set; }
    
    public Dog(string name, string breed) : base(name)
    {
        Breed = breed;
    }
}

تقوم صيغة : base(name) باستدعاء منشئ الأب قبل تنفيذ جسم منشئ الفئة المشتقة، مما يضمن التهيئة الصحيحة.

استخدم base لاستدعاء دوال الأب من الفئة المشتقة:

public class Animal
{
    public void Speak()
    {
        Console.WriteLine("Animal sound");
    }
}

public class Dog : Animal
{
    public void Speak()
    {
        base.Speak();  // يستدعي Speak الخاصة بـ Animal
        Console.WriteLine("Woof!");
    }
}

يتيح لك هذا توسيع سلوك الأب بدلاً من استبداله بالكامل.

جرّب بنفسك

using System;
using Inventory;

class Program
{
    public static void Main(string[] args)
    {
        // قراءة المدخلات
        string name = Console.ReadLine();
        decimal price = Convert.ToDecimal(Console.ReadLine());
        int warrantyMonths = Convert.ToInt32(Console.ReadLine());

        // TODO: إنشاء ElectronicProduct باستخدام قيم المدخلات
        
        // TODO: طباعة نتيجة استدعاء GetInfo() على منتجك الإلكتروني
        
    }
}
quiz iconاختبر نفسك

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

جميع دروس Object Oriented Programming