मैंने इस विषय से संबंधित सभी प्रश्नों को पढ़ा है, और वे सभी कारण बताते हैं कि struct
पर एक डिफ़ॉल्ट कन्स्ट्रक्टर सी # में उपलब्ध नहीं है, लेकिन मुझे अभी तक कोई भी नहीं मिला है जो इस स्थिति से सामना करते समय कार्रवाई के सामान्य पाठ्यक्रम का सुझाव देता है।डिफ़ॉल्ट कन्स्ट्रक्टर को छिपाने के लिए अंधेरे से कक्षाओं को कक्षाओं में परिवर्तित करना?
स्पष्ट समाधान struct
को class
पर कनवर्ट करना और परिणामों से निपटना है।
क्या इसे struct
के रूप में रखने के लिए अन्य विकल्प हैं?
मैं इस स्थिति में हमारी आंतरिक वाणिज्य API वस्तुओं में से एक के साथ भाग गया। डिजाइनर ने इसे class
से struct
में परिवर्तित कर दिया, और अब डिफ़ॉल्ट कन्स्ट्रक्टर (जो पहले निजी था) ऑब्जेक्ट को अमान्य स्थिति में छोड़ देता है।
मैंने सोचा कि अगर हम ऑब्जेक्ट को struct
के रूप में रखने जा रहे हैं, तो राज्य की वैधता की जांच के लिए एक तंत्र पेश किया जाना चाहिए (IsValid
संपत्ति की तरह कुछ)। मुझे बहुत प्रतिरोध के साथ मुलाकात की गई, और "जो कोई भी एपीआई का उपयोग करता है, उसे डिफॉल्ट कन्स्ट्रक्टर का उपयोग नहीं करना चाहिए," एक टिप्पणी जो निश्चित रूप से मेरी भौहें उठाती है। (नोट: प्रश्न में वस्तु "ठीक से" स्थिर कारखाने तरीकों के माध्यम से निर्माण किया है, और सभी अन्य निर्माताओं internal
कर रहे हैं।)
हर किसी को सिर्फ अपने struct
रों class
तों को इस स्थिति में एक दूसरे सोचा बिना रूपांतरित होता है?
संपादित करें: मैं कैसे एक struct
के रूप में इस प्रकार के ऑब्जेक्ट रखने के लिए के बारे में कुछ सुझाव देखना चाहेंगे - प्रश्न में वस्तु के ऊपर काफी बेहतर अनुकूल एक class
के रूप में की तुलना में एक struct
के रूप में है।
यह एक अच्छा सवाल है। आप एक स्ट्रक्चर डिज़ाइन कर सकते हैं जैसे कि शून्य-आउट स्टेटस मान्य है, लेकिन वह अकेले हमेशा उपयोग करने योग्य एपीआई के लिए नहीं बनायेगा। यदि डिफ़ॉल्ट कन्स्ट्रक्टर है, तो कुछ लोग अनिवार्य रूप से इसे कॉल करेंगे क्योंकि यह उनके आईडीई में पॉप अप करेगा और कम से कम प्रतिरोध का मार्ग प्रदान करेगा। और इससे समस्याएं पैदा हो जाएंगी जो संकलक को पकड़ना चाहिए, या वे एक अपरिवर्तनीय शून्य-आउट संरचना पर गुण सेट करने का प्रयास करने में समय बर्बाद कर देंगे। मेरी इच्छा है कि सी # ने आपको डिफॉल्ट कन्स्ट्रक्टर को छिपाने की अनुमति दी है और लोगों को डिफ़ॉल्ट कॉल करने के लिए मजबूर किया है (...) यदि वे वास्तव में शून्य-आउट स्ट्रक्चर चाहते हैं। –
असल में इस पर शोध करते हुए, मुझे लगता है कि उपयोगिता समस्या वास्तव में संकलक के बजाय इंटेलिजेंस में है। ऐसा प्रतीत होता है कि, एक समय पर, विजुअल स्टूडियो ने इंटेलिसेंस में डिफ़ॉल्ट कन्स्ट्रक्टर नहीं दिखाया, जो मेरी राय में, समझदारी करने वाली चीज़ है। लेकिन लोगों ने शिकायत की [यहां देखें] (http://stackoverflow.com/questions/1429495/blindly-converting-structs-to-classes-to-hide-the-default-constructor) और किसी बिंदु पर इसे बदलना होगा, चूंकि अब विजुअल स्टूडियो 2010 खाली कन्स्ट्रक्टर को पहले विकल्प के रूप में पॉप अप करता है। –