C# में एक कंस्ट्रक्टर से दूसरे कंस्ट्रक्टर को कैसे कॉल करें: सरल समाधान

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

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

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

यह क्यों महत्वपूर्ण है: एक कंस्ट्रक्टर अच्छा है, लेकिन दो बेहतर हैं

\n\n

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

\n\n

C# में कंस्ट्रक्टर से कंस्ट्रक्टर कॉल कैसे काम करता है

\n\n

C# में, आप this और base कीवर्ड का उपयोग करके एक कंस्ट्रक्टर से दूसरे कंस्ट्रक्टर को कॉल कर सकते हैं। इसे "कंस्ट्रक्टर चेनिंग" (constructor chaining) कहा जाता है। आइए दोनों विकल्पों को समझते हैं।

\n\n

1. कीवर्ड this — एक ही क्लास में कंस्ट्रक्टर को कॉल करना

\n\n

जब आपके पास एक ही क्लास में कई कंस्ट्रक्टर हों, तो आप this का उपयोग करके उनमें से किसी एक को नियंत्रण सौंप सकते हैं। यह विशेष रूप से तब उपयोगी होता है जब एक कंस्ट्रक्टर दूसरे का "सामान्यीकरण" होता है।

\n\n

सरल उदाहरण: Person क्लास, जो नाम और उम्र संग्रहीत करता है। डिफ़ॉल्ट कंस्ट्रक्टर मानक मान सेट करता है, जबकि पैरामीटरयुक्त कंस्ट्रक्टर उन्हें ओवरराइड करने की अनुमति देता है।

\n\n
public class Person\n{\n    public string Name { get; set; }\n    public int Age { get; set; }\n\n    // डिफ़ॉल्ट कंस्ट्रक्टर\n    public Person() : this("अतिथि", 18)\n    {\n        // यहाँ कुछ नहीं लिखते — सब कुछ चेनिंग करता है\n    }\n\n    // पैरामीटर वाला कंस्ट्रक्टर\n    public Person(string name, int age)\n    {\n        Name = name;\n        Age = age;\n    }\n}
\n\n

इस कोड में मुख्य बिंदु : this("अतिथि", 18) है। जब आप new Person() के माध्यम से ऑब्जेक्ट बनाते हैं, तो बिना पैरामीटर वाला कंस्ट्रक्टर कॉल होता है, लेकिन यह तुरंत दो पैरामीटर वाले कंस्ट्रक्टर को नियंत्रण सौंप देता है, उसे "अतिथि" और 18 मान देता है। इस प्रकार, सभी इनिशियलाइज़ेशन लॉजिक एक ही स्थान पर होता है।

\n\n

2. कीवर्ड base — बेस क्लास के कंस्ट्रक्टर को कॉल करना

\n\n

यदि आपकी क्लास किसी दूसरी क्लास से इनहेरिट करती है, तो आप base के माध्यम से बेस क्लास के कंस्ट्रक्टर को कॉल कर सकते हैं। यह सुनिश्चित करता है कि ऑब्जेक्ट का बेस भाग सही ढंग से इनिशियलाइज़ हो।

\n\n

उदाहरण: बेस क्लास Animal और व्युत्पन्न क्लास Dog।

\n\n
public class Animal\n{\n    public string Species { get; set; }\n\n    public Animal(string species)\n    {\n        Species = species;\n    }\n}\n\npublic class Dog : Animal\n{\n    public string Breed { get; set; }\n\n    // Dog का कंस्ट्रक्टर Animal के कंस्ट्रक्टर को कॉल करता है\n    public Dog(string breed) : base("कुत्ता")\n    {\n        Breed = breed;\n    }\n}
\n\n

यहाँ : base("कुत्ता") कंपाइलर को बताता है: "पहले बेस क्लास Animal के कंस्ट्रक्टर को 'कुत्ता' आर्गुमेंट के साथ निष्पादित करो, फिर Dog की इनिशियलाइज़ेशन जारी रखो।" इसके बिना, आपको कंपाइलेशन एरर मिलेगा, क्योंकि Animal में कोई डिफ़ॉल्ट कंस्ट्रक्टर नहीं है।

\n\n

वास्तविक उदाहरण: Stack Overflow का एक लोकप्रिय प्रश्न

\n\n

कल्पना करें कि आप एक ऑनलाइन स्टोर एप्लिकेशन पर काम कर रहे हैं। आपके पास Order क्लास है, जिसे विभिन्न तरीकों से बनाया जा सकता है: ग्राहक आईडी के साथ, पूर्ण डेटा सेट के साथ, या बिना किसी पैरामीटर के (परीक्षण के लिए)।

\n\n
public class Order\n{\n    public int OrderId { get; set; }\n    public int CustomerId { get; set; }\n    public decimal TotalAmount { get; set; }\n    public DateTime CreatedDate { get; set; }\n\n    // बिना पैरामीटर वाला कंस्ट्रक्टर — परीक्षण के लिए\n    public Order() : this(0, 0, 0)\n    {\n    }\n\n    // न्यूनतम डेटा वाला कंस्ट्रक्टर\n    public Order(int customerId, decimal totalAmount) : this(0, customerId, totalAmount)\n                

ब्लॉग

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