इगोर का जवाब कैसे आप इस स्थिति में कंस्ट्रक्टर्स लिखना चाहिए का एक अच्छा उदाहरण है। अपने अंतिम वाक्य के अधिक सामान्य मामले को संबोधित करने के लिए: आप एक से अधिक कन्स्ट्रक्टर तक श्रृंखला नहीं बना सकते हैं। आप वर्तमान श्रेणी में एक बेस कन्स्ट्रक्टर और अन्य कन्स्ट्रक्टर को कॉल नहीं कर सकते हैं।
अधिभारित कन्स्ट्रक्टर के लिए दो विशिष्ट पैटर्न हैं। पहले पैटर्न में, व्युत्पन्न वर्ग के अधिभार का सेट बेस क्लास के लिए ओवरलोड के सेट से मोटे तौर पर मेल खाता है - आप व्युत्पन्न वर्ग को महसूस करते हैं कि इसे रचनाकारों को प्रभावी ढंग से विरासत में मिला है। (रचनाकार स्वयं विरासत में नहीं हैं, लेकिन यदि आप एक ही हस्ताक्षर प्रदान करते हैं तो यह कॉलर को ऐसा लगता है।) यह आमतौर पर ऐसा होता है जब आपके व्युत्पन्न वर्ग को अतिरिक्त जानकारी की आवश्यकता नहीं होती है। बेशक प्रत्येक कन्स्ट्रक्टर अतिरिक्त पैरामीटर हो सकता है, और केवल बेस कन्स्ट्रक्टर तक सबसेट पास कर सकता है, लेकिन यह जटिल हो सकता है।
दूसरे पैटर्न में, आपके पास व्युत्पन्न कक्षा में कई रचनाकार हैं जिनमें से प्रत्येक एक ही (व्युत्पन्न) कक्षा में "मास्टर" कन्स्ट्रक्टर कहलाता है। इस मास्टर कन्स्ट्रक्टर में सबसे अधिक पैरामीटर हैं, क्योंकि इसे किसी भी अन्य रचनाकारों द्वारा निर्दिष्ट सबकुछ को संभालने में सक्षम होना चाहिए। कभी-कभी मास्टर कन्स्ट्रक्टर निजी होना चाहिए, अगर कुछ संयोजन समझ में नहीं आते हैं, लेकिन एक जगह में निर्दिष्ट करना सुविधाजनक होता है जब आप जानते हैं कि आप केवल एक समझदार सार्वजनिक कन्स्ट्रक्टर के माध्यम से कोड तक पहुंच सकते हैं। इस मामले में, केवल कि "मास्टर" कन्स्ट्रक्टर श्रृंखला सीधे बेस क्लास कन्स्ट्रक्टर के लिए है। आमतौर पर इसका उपयोग तब किया जाता है जब व्युत्पन्न वर्ग में बेस क्लास की आवश्यकता के अलावा जानकारी के कई अतिरिक्त टुकड़े होते हैं।
इस पैटर्न के संकर हैं जहां आपके पास मास्टर्स को बुलाए जाने वाले ओवरलोड के "समूह" के साथ कई स्वामी हैं ... लेकिन मैं आपको सलाह देता हूं कि जहां भी संभव हो सके इसे सरल रखें। रचनाकारों की बजाय स्थैतिक फैक्ट्री विधियों को उपलब्ध कराने की संभावना पर भी विचार करें - जो अधिक पठनीय कोड बनाने के लिए समाप्त हो सकते हैं क्योंकि आप उनके उद्देश्य/पैरामीटर द्वारा विधियों का नाम दे सकते हैं - उदाहरण के लिए TimeSpan.FromMinutes
देखें।
स्रोत
2010-08-03 05:37:12
एकमात्र संभावित समस्या जो मैं यहां देख सकता हूं वह होगा यदि आप ** कक्षा 2 (int ए) नहीं चाहते हैं: आधार (ए) ', लेकिन ** ** ** कक्षा 2(): आधार (2) '। हालांकि, मैं कक्षा संरचना के बारे में नहीं सोच सकता जहां ऐसा निर्णय सबसे अच्छा डिजाइन होगा। –
जो मुझे पता है, लेकिन मैं उनमें से दो को व्युत्पन्न वर्ग के डिफ़ॉल्ट कन्स्ट्रक्टर में निष्पादित करना चाहता हूं, जिसे मैं आधार के पैरामीटरयुक्त कन्स्ट्रक्टर को निष्पादित करना चाहता हूं और साथ ही व्युत्पन्न वर्ग के डिफ़ॉल्ट कन्स्ट्रक्टर (परिभाषा में कहीं भी लिख सकता हूं) – Nits
दाएं , आप ऐसा नहीं कर सकते हैं, आप केवल * एक अन्य कन्स्ट्रक्टर * को कॉल कर सकते हैं, दोनों नहीं। मुझे लगता है कि आपको उस डिजाइन पर पुनर्विचार करना चाहिए जिसके लिए रचनाकारों को इस तरह से बुलाया जाना चाहिए। –