C# में इनहेरिटेंस: बेस क्लास के कंस्ट्रक्टर को कैसे कॉल करें (पूर्ण गाइड)

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: बेस क्लास का कंस्ट्रक्टर सिर्फ "उबाऊ थ्योरी" क्यों नहीं है?

\n\n

कल्पना करें कि आप एक घर बना रहे हैं। आपके पास नींव (बेस क्लास) और घर (डिराइव्ड क्लास) है। नींव पहले से रखी गई है, लेकिन घर को मजबूती से खड़ा करने के लिए, इसे नींव से सही ढंग से "जोड़ना" होगा। C# में यह "जोड़" base कीवर्ड के माध्यम से बेस क्लास के कंस्ट्रक्टर को कॉल करके किया जाता है।

\n\n

यह उन विषयों में से एक है जो Stack Overflow पर हज़ारों प्रश्न उत्पन्न करता है। क्यों? क्योंकि इस तंत्र को समझे बिना, आपका कोड या तो कंपाइल नहीं होगा, या अप्रत्याशित रूप से काम करेगा। इस लेख में हम C# में बेस क्लास के कंस्ट्रक्टर को कॉल करना सरल से जटिल तक समझेंगे: उदाहरणों, छिपी समस्याओं और वास्तविक परिदृश्यों के साथ।

\n\n

आप इस लेख से क्या सीखेंगे?

\n
    \n
  • C# में कंस्ट्रक्टर इनहेरिटेंस कैसे काम करता है।
  • \n
  • कब और क्यों base() को स्पष्ट रूप से कॉल करना आवश्यक है।
  • \n
  • बेस क्लास के कंस्ट्रक्टर में पैरामीटर कैसे पास करें।
  • \n
  • सामान्य गलतियाँ और उनसे बचने के तरीके।
  • \n
  • उन्नत तकनीकें: कंस्ट्रक्टर चेन और ओवरलोडिंग।
  • \n
\n\n

1. मूल बातें: बेस क्लास का कंस्ट्रक्टर क्या है?

\n\n

C# में, प्रत्येक क्लास में एक या अधिक कंस्ट्रक्टर हो सकते हैं। जब आप डिराइव्ड क्लास का इंस्टेंस बनाते हैं, तो सबसे पहले बेस क्लास का कंस्ट्रक्टर कॉल किया जाता है। यह सुनिश्चित करता है कि "पैरेंट" के सभी फील्ड और प्रॉपर्टीज़ इनिशियलाइज़ हो जाएँ, इससे पहले कि "चाइल्ड" काम करना शुरू करे।

\n\n

यदि आप स्पष्ट रूप से यह नहीं बताते कि बेस क्लास का कौन सा कंस्ट्रक्टर कॉल करना है, तो कंपाइलर डिफ़ॉल्ट कंस्ट्रक्टर (बिना पैरामीटर के) को कॉल करने का प्रयास करेगा। यदि वह मौजूद नहीं है, तो आपको कंपाइलेशन एरर मिलेगी।

\n\n

उदाहरण 1: अंतर्निहित कॉल (बहुत सरल)

\n
public class Animal\n{\n    public string Name { get; set; }\n\n    public Animal()\n    {\n        Name = "अज्ञात जानवर";\n        Console.WriteLine("Animal: बिना पैरामीटर का कंस्ट्रक्टर");\n    }\n}\n\npublic class Dog : Animal\n{\n    public Dog()\n    {\n        Console.WriteLine("Dog: कंस्ट्रक्टर");\n    }\n}\n\n// उपयोग\nDog dog = new Dog();\n// आउटपुट:\n// Animal: बिना पैरामीटर का कंस्ट्रक्टर\n// Dog: कंस्ट्रक्टर
\n\n

यहाँ Dog अंतर्निहित रूप से Animal() को कॉल करता है। सब कुछ काम करता है, क्योंकि Animal में डिफ़ॉल्ट कंस्ट्रक्टर है।

\n\n

2. समस्या: जब डिफ़ॉल्ट कंस्ट्रक्टर मौजूद न हो

\n\n

अब कल्पना करें कि बेस क्लास को अनिवार्य पैरामीटर की आवश्यकता है। उदाहरण के लिए, एक जानवर का नाम होना चाहिए। यदि बिना पैरामीटर वाला कंस्ट्रक्टर हटा दिया जाए, तो कोड कंपाइल नहीं होगा।

\n\n

उदाहरण 2: कंपाइलेशन एरर

\n
public class Animal\n{\n    public string Name { get; }\n\n    public Animal(string name) // एकमात्र कंस्ट्रक्टर\n    {\n        Name = name;\n    }\n}\n\npublic class Dog : Animal\n{\n    // एरर CS7036: "Animal" में कोई कंस्ट्रक्टर नहीं है जो 0 आर्गुमेंट लेता हो\n    public Dog() \n    {\n    }\n}
\n\n

कंपाइलर चिल्लाता है: "अरे, मुझे नहीं पता कि बिना नाम के Animal को कैसे इनिशियलाइज़ करूँ!"। समाधान — base का उपयोग करके बेस क्लास के कंस्ट्रक्टर को स्पष्ट रूप से कॉल करना।

\n\n

3. कीवर्ड base: कंस्ट्रक्टर का स्पष्ट कॉल

\n\n

C# में कीवर्ड base का उपयोग बेस क्लास के सदस्यों को संदर्भित करने के लिए किया जाता है। कंस्ट्रक्टर के संदर्भ में, यह निर्दिष्ट करने की अनुमति देता है कि पैरेंट का कौन सा कंस्ट्रक्टर और किन आर्गुमेंट्स के साथ कॉल किया जाना चाहिए।

\n\n

सिंटैक्स:

\n
public class डिराइव्डक्लास : बेसक्लास\n{\n    public डिराइव्डक्लास(पैरामीटर) : base(आर्गुमेंट्स)\n    {\n        // कंस्ट्रक्टर का बॉडी\n    }\n}
\n\n

कोलन और base(आर्गुमेंट्स) कंस्ट्रक्टर की सिग्नेचर के तुरंत बाद, बॉडी से पहले लिखा जाता है।

\n\n

उदाहरण 3: एरर को ठीक करना

\n
public class Animal\n{\n    public string Name { get; }\n\n    public Animal(string name)\n    {\n        Name = name;\n        Console.WriteLine($"Animal: {name} बनाया गया");\n

ब्लॉग

पुस्तक अनुशंसाएँ