Avatar ·

कंस्ट्रक्टर में वर्चुअल मेथड कॉल: यह खतरनाक क्यों है और इससे कैसे बचें?

सभी को नमस्कार! मैं एक शुरुआती 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" होगा, लेकिन कभी-कभी मुझे अप्रत्याशित व्यवहार मिलता है। ऐसा क्यों होता है? आखिर बेस क्लास का कंस्ट्रक्टर व्युत्पन्न कंस्ट्रक्टर से पहले कॉल होता है।