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