विस्तार विधियों को केवल गैर-नेस्टेड, गैर-जेनेरिक स्थैतिक वर्ग में क्यों अनुमति दी जाती है? क्या नेस्टेड, सामान्य स्थैतिक वर्ग में विस्तार विधियों पर विचार करना बेकार है?विस्तार विधियों को केवल गैर-नेस्टेड, गैर-सामान्य स्थैतिक वर्ग में क्यों अनुमति दी जाती है?
उत्तर
एक्सटेंशन विधियों को केवल गैर-नेस्टेड, गैर-सामान्य स्थैतिक वर्ग में क्यों अनुमति दी जाती है?
प्रतीक बताते हैं के रूप में, सवाल का हम सामना नहीं है "क्यों विस्तार तरीकों नहीं नेस्टेड या सामान्य कक्षाओं में अनुमति है?" भाषा डिजाइनरों के रूप में हम जिस प्रश्न का सामना करते हैं, वह है "क्यों नेस्टेड या जेनेरिक कक्षाओं में एक्सटेंशन विधियों की अनुमति दी जानी चाहिए?"
जब तक कि कुछ वास्तविक दुनिया उपयोगकर्ता की ज़रूरत नहीं है, तो हम इस सुविधा को डिजाइन करने, कार्यान्वित करने, परीक्षण करने, दस्तावेज करने और बनाए रखने की काफी लागत नहीं ले रहे हैं।
असल में, एक्सटेंशन विधियों को LINQ कार्य करने के लिए डिज़ाइन किया गया था। कुछ भी जो LINQ काम करने में योगदान नहीं करता था कटौती की गई थी। LINQ को केवल स्थिर, गैर-जेनेरिक, गैर-नेस्टेड कक्षाओं में काम करने के लिए एक्सटेंशन विधियों की आवश्यकता होती है, इसलिए हमने इसे डिज़ाइन और कार्यान्वित किया है।
यदि आपके पास ऐसा परिदृश्य है जहां गैर-स्थैतिक, जेनेरिक, या नेस्टेड कक्षाओं में एक्सटेंशन विधियां उपयोगी होंगी तो मुझे परिदृश्य पर एक नज़र डालने में खुशी होगी। जितना वास्तविक वास्तविक परिदृश्य हमें मिलता है, उतना ही अधिक संभावना है कि हम कुछ अनुमानित भविष्य की भाषा में एक विशेषता बनाएंगे जो उन परिदृश्यों को लाभान्वित करे।
यह नेस्टेड, सामान्य स्थिर कक्षा में विस्तार तरीकों पर विचार करना बेकार है?
नहीं, यह विचार करना एक अच्छा विचार है। अगर हम इसे नहीं मानते तो हम अपने कर्तव्यों में क्षमा करेंगे। हमने इसे लंबे समय से सावधानी से माना और निर्णय लिया कि उस विचार के आधार पर, सुविधा करने की लागत अर्जित लाभों द्वारा उचित नहीं थी।
मुझे विश्वास है कि यह किया गया था ताकि संकलक उचित समय में एक्सटेंशन विधि का पता लगा सके/खोज सके। इसके अलावा, ध्यान दें कि फ़ाइल स्कोप में मौजूद नामस्थानों के सेट में केवल जटिल खोज एक्सटेंशन विधियां - यह इसी कारणों से भी की जाती है।
यदि आप जेनेरिक स्थैतिक वर्ग परिदृश्य के बारे में सोचते हैं, तो कंपाइलर को एक्सटेंशन विधि से मेल खाने के लिए सभी संभावित प्रकार संयोजनों के लिए ठोस प्रकारों को तुरंत चालू करने का प्रयास करना चाहिए। भले ही शिकायतकर्ता ऐसा करने में स्मार्ट हो, फिर भी विस्तार विधियों को कॉल करने के लिए कंक्रीट प्रकार को तत्काल करने से साइड इफेक्ट हो सकता है कि डेवलपर को पता नहीं हो सकता है।
हालांकि, आप अभी भी वर्ग के स्कोप व्हीवर में हो सकते हैं, हालांकि कक्षा है। मैं, एक नेस्टेड स्थैतिक वर्ग के विस्तार रैपिंग कक्षा में गुंजाइश में होगा; और विशेष रूप से यह समस्याग्रस्त नहीं है भले ही रैपिंग क्लास गैर स्थैतिक और सामान्य हो। –
मैंने इस तर्क को (गैर-नेस्टेड, गैर-जेनेरिक स्थैतिक कक्षाओं को अपनी खोज तेज करने के लिए विस्तार विधियों का प्रतिबंध) सुना है, लेकिन अब मुझे इतना आश्वस्त नहीं है: मुझे संदेह है कि सभी स्थिर तरीकों को बहुत तेज़ी से पहचानना संभव होगा 'एक्सटेंशन एट्रिब्यूट' के साथ सजाए गए एक असेंबली में, अर्थात् 'कस्टमएट्रिब्यूट' सीएलआई मेटाडेटा तालिका स्कैन करके ([सीएलआई विनिर्देश (ईसीएमए -335) के अध्याय II.22.10 देखें (http: //www.ecma-international। org/प्रकाशन/फ़ाइलें/ECMA-अनुसूचित जनजाति/ECMA-335.pdf))। – stakx
जैसा कि एरिक लिपर्ट ने अपने ब्लॉग में कई बार लिखा है, सी # में प्रत्येक परिवर्तन का ध्यानपूर्वक इसे उचित ठहराने के लिए मानदंडों के एक सेट के खिलाफ मूल्यांकन किया जाता है और अकेले प्रौद्योगिकी के आधार पर नहीं। इस मामले में जोखिम को कम करने के लिए LINQ को काटने के लिए आवश्यक नहीं था। एक समान प्रश्न के लिए एरिक से blog post देखें।
- 1. संशोधक स्थैतिक केवल स्थिर परिवर्तनीय घोषणाओं में ही अनुमति दी जाती है
- 2. अनुमति केवल, सिस्टम एप्लिकेशन को दी जाती है प्रकट
- 3. सामान्य स्थैतिक वर्ग में विस्तार विधियों को घोषित करना असंभव क्यों है?
- 4. नेस्टेड स्थैतिक कक्षाओं में एक्सटेंशन विधियों की अनुमति नहीं है?
- 5. सरणी प्रारंभकर्ताओं को केवल सरणी के लिए अनुमति क्यों दी जाती है?
- 6. अंतिम जावा कक्षाओं में संरक्षित सदस्यों को क्यों अनुमति दी जाती है?
- 7. java.util.ArrayList में आदिम डेटाटाइप को अनुमति क्यों नहीं दी जाती है?
- 8. गैर स्थैतिक वर्ग में सभी स्थिर विधियों/चर क्यों हैं?
- 9. इनपुट टैग को सीधे फ़ॉर्म टैग में क्यों अनुमति नहीं दी जाती है?
- 10. स्कैला सहायक कन्स्ट्रक्टर में पैरामीटर की अनुमति क्यों नहीं दी जाती है?
- 11. सी # में बेस क्लास को बिना किसी विरासत के इंटरफ़ेस अनुबंध को लागू करने की अनुमति क्यों दी जाती है?
- 12. एक स्थैतिक वर्ग में एक स्थिर स्थैतिक वर्ग और स्थैतिक तरीकों में स्थिर तरीकों के बीच क्या अंतर है?
- 13. एक्सटेंशन विधियों के लिए "स्थैतिक" और "यह" क्यों आवश्यक हैं, और उनकी याददाश्त कैसे आवंटित की जाती है?
- 14. क्यों अतिभारित विधियाँ उदाहरण विधि की तुलना में कम प्राथमिकता दी जाती है
- 15. इंटरफ़ेस विधियों को लागू करते समय आभासी अनुमति क्यों है?
- 16. विस्तारित PHP स्थैतिक वर्ग
- 17. लोक स्थैतिक विधियों बनाम सार्वजनिक विधियों
- 18. स्थैतिक वर्ग में प्रेषण - AS3
- 19. नोटिफ़िकॉन की गारंटी कैसे दी जाती है?
- 20. अनुमति नहीं दी - php को अनलिंक
- 21. विस्तार कार्यों के साथ एक स्थैतिक वर्ग में खुद को इंजेक्ट करने के लिए कैसे करें
- 22. क्या विस्तार विधियों में उपसर्ग होना चाहिए?
- 23. ImageSource को WPF संसाधन के रूप में क्यों अनुमति दी गई है?
- 24. आप विस्तार विधियों को सीधे क्यों नहीं बुला सकते हैं?
- 25. नए ऑपरेटर को वापस लौटने की अनुमति क्यों दी जाती है * प्रत्येक पॉइंटर-प्रकार के लिए शून्य?
- 26. स्थैतिक विधियों और यूनिट परीक्षण
- 27. मॉडिफायरों को पैकेज के लिए अनुमति क्यों दी जाती है जब वे कुछ भी नहीं करते हैं?
- 28. केवल वर्ग विरासत को अस्वीकार करें
- 29. विस्तार विधियों के नुकसान?
- 30. जावा - एक वर्ग का विस्तार और विधियों का पुन: उपयोग?
ठीक है। धन्यवाद। अच्छा और स्पष्ट स्पष्टीकरण! LINQ के लिए ... – xport
@EricLippert: मुझे इस आलेख को पहले गैर-स्थैतिक वर्ग में एक विस्तार विधि बनाने और फिर एक स्थिर आंतरिक कक्षा में बनाने का प्रयास करने के बाद मिला। मैंने ऐसा इसलिए किया क्योंकि मैं एक नल-सुरक्षित "इंस्टेंस" विधि बनाना चाहता था जो एक डिफ़ॉल्ट मान लौटाता था (इस मामले में शून्य, इसलिए मुझे लगता है कि इसे शून्य-प्रचार करने वाले सदस्य-पहुंच का मामला माना जा सकता है, हालांकि मैं वास्तव में सोच रहा था यह एक और सामान्य दृश्य से)। यह बहुत अच्छा होगा अगर अधिकांश, यदि नहीं, तो स्ट्रिंग विधियों की तरह इस तरह थे; यह शायद इसके लिए बहुत देर हो चुकी है, लेकिन अगर यह शुरुआत में उपलब्ध थी ... – jmoreno
संभवतः मेरा प्रश्न जो अनिवार्य रूप से इस पर एक डुप्लिकेट है, एक असली दुनिया का उदाहरण प्रदान करता है (?) ... http://stackoverflow.com/प्रश्न/11443842/क्यों-नहीं-अनुमति-विस्तार-विधि-परिभाषा-इन-नेस्टेड-श्रेणी –