कंस्ट्रक्टर में वर्चुअल मेथड को कॉल करना: खतरा क्या है और इससे कैसे बचें?
सभी को नमस्ते! मैं एक शुरुआती C# डेवलपर हूं, और हाल ही में ReSharper ने मुझे इस कोड पर "Virtual member call in a 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 Animal कंस्ट्रक्टर में `Initialize(name)` कॉल को हाइलाइट करता है। मुझे समझ नहीं आ रहा कि समस्या क्या है। आखिर वर्चुअल मेथड को ओवरराइड करने के लिए ही बनाया जाता है।