استدعاء method افتراضي في constructor: ما الخطر وكيف تتجنبه؟
مرحبًا بالجميع! أنا مطور C# مبتدئ، ومؤخرًا بدأ ReSharper يعطيني تحذيرًا "استدعاء عضو افتراضي في constructor" على هذا الكود:
```csharp
public class Animal
{
public string Name { get; set; }
public Animal(string name)
{
Initialize(name);
}
public virtual void Initialize(string name)
{
Name = name;
Console.WriteLine("Animal initialized");
}
}
public class Dog : Animal
{
public string Breed { get; set; }
public Dog(string name, string breed) : base(name)
{
// فارغ
}
public override void Initialize(string name)
{
base.Initialize(name);
Breed = "Unknown";
Console.WriteLine("Dog initialized");
}
}
```
يبدو أن الكود يعمل ويطبع الرسائل المتوقعة، لكن ReSharper يسلط الضوء على استدعاء `Initialize(name)` في constructor الخاص بـ `Animal`. لا أفهم ما المشكلة. فالميثودات الافتراضية (virtual methods) موجودة لهذا الغرض، أليس كذلك؟