استدعاء الطريقة الافتراضية في المُنشئ: لماذا هو خطير وكيف تتجنبه؟
مرحباً بالجميع! أنا مطور C# مبتدئ، وواجهت مشكلة. أستخدم ReSharper ولاحظت أنه يُصدر تحذيراً: «Virtual member call in a constructor». لدي كلاس أساسي `Animal` وكلاس مشتق `Dog`. في مُنشئ `Animal`، أستدعي الطريقة الافتراضية `Speak()` لتعيين اسم افتراضي. إليك المثال:
```csharp
public class Animal
{
public string Name { get; set; }
public Animal()
{
// ReSharper: Virtual member call in a constructor
InitializeName();
}
public virtual void InitializeName()
{
Name = "Unknown animal";
}
}
public class Dog : Animal
{
public override void InitializeName()
{
Name = "Buddy";
Console.WriteLine("Dog initialized!");
}
}
```
عندما أنشئ `Dog dog = new Dog();`، أتوقع أن يكون الاسم "Buddy"، لكن أحياناً أحصل على سلوك غير متوقع. لماذا يحدث هذا؟ فمُنشئ الكلاس الأساسي يُستدعى قبل مُنشئ الكلاس المشتق.