{} में ऑब्जेक्ट पैरामीटर बनाना?


15

मैं एक किताब से कोड का एक टुकड़ा डीकोड करने की कोशिश कर रहा हूं:

List<Person> people = new List<Person>()
{
new Person {FirstName="Homer",LastName="Simpson",Age=47},
new Person {FirstName="Marge",LastName="Simpson",Age=45}
};

व्यक्ति सिर्फ एक साधारण वर्ग है जो उन्होंने खेतों के एक समूह के साथ बनाया है: नाम, अंतिम नाम, आदि ...

जो मुझे समझ नहीं आ रहा है, क्या हम नॉन-कर्ली कोष्ठक में व्यक्ति के एक निर्माता को पैरामीटर नहीं भेजते हैं? मैंने इस कोड की नकल करने की कोशिश की, लेकिन यह उड़ान भरने वाला नहीं लगता, कोई लेने वाला?

इनपुट के लिए धन्यवाद।



1
"मैंने इस कोड की प्रतिकृति बनाने की कोशिश की, लेकिन यह उड़ान भरने के लिए प्रतीत नहीं होता है" <- आपको इस वाक्यविन्यास के लिए C # 3 (VS 2008) या बाद में उपलब्ध होने की आवश्यकता है।
आकाशमण्डल

दो अवधारणाओं के बीच के अंतरों से अवगत रहें: ऑब्जेक्ट इनिशियलाइज़ेशन और ऑब्जेक्ट जनसंख्या। सामान्य तौर पर आप कंस्ट्रक्टर में इनिशियलाइजेशन करते हैं। आपके उदाहरण का तरीका जनसंख्या के लिए सबसे अच्छा उपयोग किया जाता है।
NoChance

जवाबों:


27

C # जब आप ऑब्जेक्ट इनिशियलाइज़ किए जाते हैं तो आपको घुंघराले ब्रेसिज़ में प्रॉपर्टी पैरामीटर निर्दिष्ट करने की अनुमति देता है। यह आपको चुनने और चुनने की अनुमति देता है कि कौन सी वस्तुओं को इनिशियलाइज़ करना है और कौन सी चूक को छोड़ना है।

दूसरी ओर, एक निर्माता, मापदंडों के एक निश्चित सेट के साथ कोड का एक एकल ब्लॉक चलाता है। तो एक ही प्रभाव प्राप्त करने के लिए आपको उन सभी गुणों के विभिन्न संयोजनों के साथ कई निर्माणकर्ता बनाने होंगे, जिन्हें आप आरंभीकृत करना चाहते हैं, जो कठिन हो सकता है।

var x = new Person {FirstName="Homer",LastName="Simpson",Age=47}; 

इस के बराबर है:

var x = new Person();
x.FirstName="Homer";
x.LastName="Simpson";
x.Age=47;

सिवाय इसके कि यह आंखों पर छोटा और यकीनन आसान है।

यह आपके प्रश्न में प्रदर्शित किए गए निर्माणों के लिए भी अनुमति देता है, जो बहुत ही थकाऊ होगा यदि आपको अस्थायी चर बनाने और उन्हें बाहर निकालना था जैसा कि मैंने उन्हें सूची में जोड़ने से पहले यहां किया था। (जो है कि आप इसे कैसे करते थे।) सभी को स्पष्ट रूप से परिभाषित निर्माता की आवश्यकता के बिना, जो आपके वांछित मापदंडों की सूची लेता है, जो उपलब्ध हो सकता है या नहीं।

इसके अलावा, ध्यान दें कि जब कोई कंस्ट्रक्टर एक निजी सेटर के साथ संपत्तियों की गणना कर सकता है, तो यह तकनीक (जैसा कि उपलब्ध उदाहरण से स्पष्ट होना चाहिए) केवल तभी काम करेगी जब आपके पास संपत्ति के लिए एक सार्वजनिक सेटर हो। यह भी ध्यान दें कि मेरे संक्षिप्त उदाहरण को डिफ़ॉल्ट रूप से डिफ़ॉल्ट (पैरामीटर रहित) कंस्ट्रक्टर कहा जाता है, इसलिए इसे प्रस्तुत करना होगा।


यह जोड़ने के लायक हो सकता है कि इसके कारण, घुंघराले ब्रेसिज़ में प्रारंभिक गुण सार्वजनिक रूप से व्यवस्थित होना चाहिए।
यम मारकोविच

@YamMarcovic आह। हाँ। उस प्रभाव में नोट जोड़ा गया।
tylerl

2
आह, मैं प्रबुद्ध हूँ, उत्कृष्ट व्याख्या।
RealityDysfunction

2
एक एकल निर्माता के साथ एक समान प्रभाव पाने के लिए, आप इसके सभी मापदंडों को वैकल्पिक बना सकते हैं। तब आप कुछ ऐसा कर सकते थे new Person(lastName: "Simpson"), जैसे firstNameऔर ageमापदंडों को छोड़ कर ।
svick

यह पता नहीं है कि आप सिर्फ उन लोगों को कंस्ट्रक्टर के पास क्यों नहीं भेज सकते हैं, अर्थात्var x = new Person("Homer", "Simpson", 47);
रेरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.