التجاوز (virtual / override)
الأب يعلّم الدالة virtual، والابن يعيد تعريفها بـ override:
class Animal
{
public virtual void Sound() => Console.WriteLine("صوت");
}
class Cat : Animal
{
public override void Sound() => Console.WriteLine("مواء");
}
class Dog : Animal
{
public override void Sound() => Console.WriteLine("نباح");
}
الربط الديناميكي
Animal[] animals = { new Cat(), new Dog() };
foreach (Animal a in animals)
a.Sound(); // مواء ثم نباح — حسب النوع الفعلي
التحميل (Overloading)
نفس الاسم بمعاملات مختلفة:
int Add(int a, int b) => a + b;
double Add(double a, double b) => a + b;
int Add(int a, int b, int c) => a + b + c;
base من داخل override
public override void Sound()
{
base.Sound(); // استدعاء نسخة الأب
Console.WriteLine("إضافة");
}
الفرق
| النوع | متى |
|---|---|
| Overriding | بين أب وابن، virtual/override |
| Overloading | داخل صنف، نفس الاسم بمعاملات مختلفة |
🎯 التالي: التجريد والواجهات.