सी # में, यह लागू करने का कोई तरीका है कि किसी वर्ग में पैरामीटर रहित कन्स्ट्रक्टर होना चाहिए?पैरामीटर रहित कन्स्ट्रक्टर्स
उत्तर
आप हाँ सामान्य की कमी के बारे में बात करते हैं कर रहे हैं,:
class SomeContainer<T> where T : new() {
...
}
आप विरासत के बारे में बात कर रहे हैं। यह आवश्यक नहीं है कि प्रत्येक कक्षा जो आपके इंटरफ़ेस को लागू करती है या आपके बेस क्लास को विरासत में रखती है, में पैरामीटर रहित कन्स्ट्रक्टर होता है। ;
abstract class MyBase {
protected MyBase() {
if (GetType().GetConstructor(Type.EmptyTypes) == null)
throw new InvalidProgramException();
}
}
आप एक ही वर्ग के बारे में बात कर रहे हैं, हाँ:
सबसे अच्छा तुम कर सकते होअपने आधार निर्माता (कार्यावधि में) एक अपवाद फेंक में उपयोग के प्रतिबिंब, इस तरह है बस एक में डाल दें।
यह आपके लिए क्या मतलब है निर्भर करता है।
उदाहरण के लिए, आप कक्षा में एक सामान्य प्रकार पैरामीटर या new
कीवर्ड के साथ पैरामीटर-कम कन्स्ट्रक्टर रखने की विधि को बाधित कर सकते हैं, लेकिन इससे परे वास्तविक वर्ग परिभाषा को सीमित करने की वास्तविक विधि नहीं है।
public void DoSomething<T>() where T : new() { }
सरकारी MSDN दस्तावेज में उल्लेख किया है, सी # संकलक स्वचालित रूप से एक parameterless निर्माता कि डिफ़ॉल्ट मानों के लिए सभी सदस्य चर initializes उत्पन्न करता है। आप अपने खुद के कार्यान्वयन को लागू करना चाहते हैं, तो आप बस यह कर सकते हैं:
वर्ग BaseClass { BaseClass() {// parameterless निर्माता का कार्यान्वयन} }
आप सामान्य की कमी की बात कर रहे हैं, फिर स्लाक्स की पोस्ट देखें।
संदर्भ
इसके अतिरिक्त, आप एक क्लास को निजी एक्सेस संशोधक का उपयोग करके पैरामीटर रहित कन्स्ट्रक्टर नहीं कर सकते हैं। –
उप-वर्गों में अभी भी एक पैरामीटर रहित कन्स्ट्रक्टर हो सकता है, भले ही बेस क्लास कन्स्ट्रक्टर निजी हो, तब तक कम से कम एक बेस कन्स्ट्रक्टर सार्वजनिक या संरक्षित है (या आंतरिक वर्ग यदि उप वर्ग एक ही असेंबली में है)। –
@ पोस्टमैन: यह उप-वर्ग को बेस कन्स्ट्रक्टर को हमेशा कुछ पैरामीटर प्रदान करने के लिए प्रतिबंधित करेगा, लेकिन यह "काम नहीं करेगा" से बहुत रोना है। –
मैं इस तरह एक समस्या कई बार सामना किया है, मुझे लगता है कि सार/इंटरफ़ेस निर्माताओं के लिए यह आवश्यक हैं। समस्या तब होती है जब आप Activator.CreateInstance
या किसी अन्य तकनीक को तत्काल करने के लिए उपयोग कर रहे हैं जिसे आप कार्यान्वित नहीं कर सकते (सुंदर सामान्य आईओसी)। यदि आप डेवलपर को सही पैरा के साथ एक कन्स्ट्रक्टर को कार्यान्वित करने के लिए मजबूर कर सकते हैं तो जीवन बहुत आसान होगा - भले ही उद्देश्य बेस कन्स्ट्रक्टर को पैरा को पास करना है।
new()
बाधा ने 2.0 के बाद से समस्या को थोड़ा सा मदद की है, लेकिन यह अभी भी जेनेरिक का उपयोग न करने का उपयोग करते समय समस्या का समाधान नहीं करता है, या यदि आप विशिष्ट तर्क चाहते हैं (और अजीब के साथ गड़बड़ नहीं करना चाहते हैं ConstructorInfo, जिसे स्थैतिक रूप से चेक नहीं किया जा सकता है।)
जेनेरिक्स इस लागू कर सकते हैं, लेकिन हम हमेशा जेनरिक उपयोग नहीं कर रहे, पी
आप इकाई परीक्षण का उपयोग कर रहे हैं, तो आप प्रतिबिंब का उपयोग सभी प्रकार है कि पैटर्न को पूरा करते हैं सकता है आपके पास करने के लिएचाहते पैरामीटर रहित कन्स्ट्रक्टर (उदाहरण के लिए, MyBaseObject
से प्राप्त सब कुछ, या Foo.Bar
नेमस्पेस में सब कुछ), और पैरामीटर रहित कन्स्ट्रक्टर ढूंढकर)।
यदि आप इसे रनटाइम पर भी जोर देना चाहते हैं (शायद #DEBUG
में), स्थिर रचनाकार जैसी चीजें अतिरिक्त प्रकार के चेक इंजेक्ट करने के लिए उपयोगी बिंदु हो सकती हैं।
- 1. इकाई फ्रेमवर्क पैरामीटर/ओवरलोडेड कन्स्ट्रक्टर्स?
- 2. ऑटोफैक पैरामीटर रहित कन्स्ट्रक्टर चयन
- 3. KeyValuePair - कोई पैरामीटर रहित कन्स्ट्रक्टर नहीं है?
- 4. कन्स्ट्रक्टर्स विरासत
- 5. जावा कन्स्ट्रक्टर्स
- 6. ओवरराइडिंग कन्स्ट्रक्टर्स
- 7. जेनेरिक कन्स्ट्रक्टर्स का लाभ
- 8. पॉलिमॉर्फिज्म और कन्स्ट्रक्टर्स
- 9. डीडीडी + सार्वजनिक पैरामीटर रहित रचनाकार - क्या वे मौजूद होना चाहिए?
- 10. क्यों संरचना में पैरामीटर रहित कन्स्ट्रक्टर नहीं हो सकता
- 11. में सार्वजनिक पैरामीटर रहित कन्स्ट्रक्टर होना चाहिए, है ना?
- 12. एसक्यूएलमैटल कक्षाएं उत्पन्न करता है लेकिन पैरामीटर रहित कन्स्ट्रक्टर नहीं
- 13. स्कैला डीएसएल: पैरामीटर रहित विधियों के साथ विधि श्रृंखला
- 14. सीमा रहित
- 15. जेएस कन्स्ट्रक्टर्स में रिटर्न स्टेटमेंट
- 16. अजगर विशेषाधिकार रहित ICMP
- 17. सीमा रहित फॉर्म एज
- 18. हानि रहित Decomposition
- 19. शाखा रहित बाइनरी खोज
- 20. क्या सी ++ कन्स्ट्रक्टर्स टेम्पलेट्स हो सकते हैं?
- 21. एएसपी.NET एमवीसी नियंत्रक कन्स्ट्रक्टर्स में सत्र शून्य,
- 22. पारदर्शी, सीमा रहित पाठ इनपुट
- 23. खिड़की रहित नियंत्रण क्या है?
- 24. एक्सएमएल-सीरियलज़ेबल क्लास को पैरामीटर रहित कन्स्ट्रक्टर की आवश्यकता क्यों है
- 25. कंटेनर निर्माण में इंजेक्शन कन्स्ट्रक्टर के रूप में पैरामीटर रहित कन्स्ट्रक्टर को सेट करना
- 26. एएसपी.नेट एमवीसी वेबएपी: इस ऑब्जेक्ट के लिए परिभाषित कोई पैरामीटर रहित कन्स्ट्रक्टर
- 27. मैं कैसे जांचूं कि कोई प्रकार पैरामीटर रहित कन्स्ट्रक्टर प्रदान करता है या नहीं?
- 28. इस ऑब्जेक्ट के लिए कोई पैरामीटर रहित कन्स्ट्रक्टर परिभाषित नहीं किया गया है। केंडो ग्रिड
- 29. "... पैरामीटर रहित कन्स्ट्रक्टर और प्रारंभकर्ता समर्थित हैं ..." त्रुटि का मतलब क्या है?
- 30. पैरामीटर रहित कन्स्ट्रक्टर रखने के लिए मैं व्युत्पन्न कक्षाओं को क्यों लागू नहीं कर सकता?
कृपया अधिक जानकारी प्रदान करें। – SLaks