का उपयोग रोकें डिफ़ॉल्ट कन्स्ट्रक्टर के उपयोग को रोकने के लिए कोई तरीका है?डिफ़ॉल्ट कन्स्ट्रक्टर
सभी मैं के बारे में सोच सकते हैं एक अपवाद फेंक है, लेकिन मैं कुछ है कि एक संकलन समय त्रुटि होती है चाहते हैं।
का उपयोग रोकें डिफ़ॉल्ट कन्स्ट्रक्टर के उपयोग को रोकने के लिए कोई तरीका है?डिफ़ॉल्ट कन्स्ट्रक्टर
सभी मैं के बारे में सोच सकते हैं एक अपवाद फेंक है, लेकिन मैं कुछ है कि एक संकलन समय त्रुटि होती है चाहते हैं।
मैं लगता के लिए है कि सभी ठिकानों को कवर करना चाहिए डिफ़ॉल्ट निर्माता उत्पन्न नहीं किया जाएगा ...
आपने कहा कि मैं बस इतना टाइप कर रहा था :) – Joel
मेरी इच्छा है कि मैं बहुत पहले स्थिर कक्षाओं के बारे में जानता था। – luiscubal
जब तक, यह एक संरचना नहीं है और कक्षा नहीं है। यदि ऐसा है, तो डिफ़ॉल्ट सीटीआर उत्पन्न होता है (एक अच्छी बात यह है कि सभी प्रोप प्रारंभ किए जाते हैं) लेकिन कॉल करने योग्य (दुर्भाग्य से) - यानी मैं उपयोगकर्ता को पैरामीटर के साथ सीटीआर का उपयोग करने के लिए मजबूर करना चाहता हूं। –
इसे निजी बनाएं।
तो,
class SomeClass
{
private SomeClass()
{
}
public SomeClass(int SomeParam)
{
}
}
+1। – corsiKa
जब तक आपको इसे टाइप (या नेस्टेड प्रकार) में नहीं चाहिए, तो आप इसे पूरी तरह से यहां हटा सकते हैं - यह केवल तब उत्पन्न होगा जब कोई कन्स्ट्रक्टर स्पष्ट रूप से घोषित नहीं किया जाता है। –
@ जोन मैं आमतौर पर एक बेल्ट और निलंबन करने वाला व्यक्ति हूं इसलिए मैं इसे सामान्य रूप से इस तरह से करता हूं; जिस तरह से मैं करने की कोशिश कर रहा हूं वह इसे देखकर किसी को भी स्पष्ट है। यह जानना अच्छा है कि यह संकलक द्वारा स्वचालित रूप से संभाला जाता है, हालांकि, अगर मैं भूल जाता हूं। –
तुम बस यह निजी बना सकते हैं:
private MyClass()
{
}
वैकल्पिक रूप से (यदि आप पहले नहीं पता था) अगर आप सिर्फ मानकों के साथ एक निर्माता की घोषणा, डिफ़ॉल्ट प्रतिसाद नहीं कंपाइलर द्वारा जोड़ा नहीं है, उदाहरण के लिए
private MyClass(string myParameter)
{
//Can't call new MyClass() anymore
}
उल्लेख करने की एक बात यह है कि दूसरों ने नहीं किया है। पुन: उपयोग से बचने के लिए डिफ़ॉल्ट कन्स्ट्रक्टर अभी भी डिफ़ॉल्ट कार्यान्वयन बिट्स सेट करने में सक्षम होना चाहिए। यदि यह निजी है, तो यह कोई समस्या नहीं है, क्योंकि आप अभी भी एक निजी निर्माता के लिए चेन कर सकते हैं। आप इसे बाहरी स्रोतों के लिए अनुपलब्ध बनाते हैं।
private MyClass()
{
}
public MyClass(string something) : this()
{
}
कि समस्या का हल। नोट, हालांकि, अगर वर्ग सील नहीं किया गया है तो संरक्षित वास्तव में एक पसंदीदा कार्यान्वयन हो सकता है।
, आपको निम्न पाठ पढ़ सकते हैं , सिंगलटन पर अधिक जानकारी के लिए पैटर्न, और कुछ उदाहरण। सिंगलटन पैटर्न निजी होने पर निर्माता पर निर्भर करता है।
आप मुसीबत में पड़ सकता है, यदि आप ऐसा करते हैं: (। बाध्यकारी/क्रमबद्धता/आदि) नेट में सामान्य parameterless निर्माता चीजों की एक संख्या के लिए आवश्यक है। कन्स्ट्रक्टर पैराम्स के माध्यम से सेट करने के लिए आपको जो भी मूल्य चाहिए, उसके लिए डिफ़ॉल्ट होने पर विचार करें। इससे आपके मामले में कोई फर्क नहीं पड़ता है, लेकिन यह उल्लेखनीय है। बिंदु के लिए –