मैं निम्नलिखित जैसे C # कोड के कई उदाहरणों में आया हूं:
public static int Foo(this MyClass arg)
मैं this
इस मामले में कीवर्ड का क्या अर्थ है, इसका स्पष्टीकरण नहीं पा सका हूँ । कोई अंतर्दृष्टि?
मैं निम्नलिखित जैसे C # कोड के कई उदाहरणों में आया हूं:
public static int Foo(this MyClass arg)
मैं this
इस मामले में कीवर्ड का क्या अर्थ है, इसका स्पष्टीकरण नहीं पा सका हूँ । कोई अंतर्दृष्टि?
जवाबों:
यह एक विस्तार विधि है । स्पष्टीकरण के लिए यहां देखें ।
एक्सटेंशन विधियां डेवलपर्स को मौजूदा सीएलआर प्रकार के सार्वजनिक अनुबंध में नए तरीकों को जोड़ने की अनुमति देती हैं, बिना इसे उप-वर्ग के लिए या मूल प्रकार को फिर से जोड़ने के बिना। एक्सटेंशन मेथड्स गतिशील भाषाओं के भीतर लोकप्रिय "डक टाइपिंग" समर्थन के लचीलेपन को मिश्रण करने में मदद करते हैं जो आज जोरदार-टाइप की गई भाषाओं के प्रदर्शन और संकलन-समय सत्यापन के साथ हैं।
एक्सटेंशन मेथड विभिन्न प्रकार के उपयोगी परिदृश्यों को सक्षम करते हैं, और वास्तव में शक्तिशाली LINQ क्वेरी फ्रेमवर्क को संभव बनाने में मदद करते हैं ...।
इसका मतलब है कि आप कॉल कर सकते हैं
MyClass myClass = new MyClass();
int i = myClass.Foo();
बजाय
MyClass myClass = new MyClass();
int i = Foo(myClass);
यह नीचे दिए गए धाराप्रवाह इंटरफेस के निर्माण की अनुमति देता है ।
स्कॉट गु के उद्धृत ब्लॉग पोस्ट यह अच्छी तरह से बताते हैं।
मेरे लिए, प्रश्न का उत्तर उस पोस्ट में निम्नलिखित कथन में है:
ध्यान दें कि किस प्रकार की स्टैटिक विधि में टाइप स्ट्रिंग के पहले पैरामीटर तर्क से पहले "यह" कीवर्ड है। यह संकलक को बताता है कि इस विशेष एक्सटेंशन विधि को "स्ट्रिंग" प्रकार की वस्तुओं में जोड़ा जाना चाहिए। IsValidEmailAddress () मेथड इम्प्लीमेंटेशन के बाद मैं सभी सार्वजनिक प्रॉपर्टीज / मेथड्स / वास्तविक स्ट्रिंग इंस्टेंस के ईवेंट्स तक पहुंच सकता हूं, जिस पर मेथड को कॉल किया जा रहा है, और यह मान्य ईमेल है या नहीं, इस आधार पर सही / गलत रिटर्न करें।
this
विधि हस्ताक्षर में कीवर्ड का वास्तविक उद्देश्य क्या है। अन्य जवाब केवल अनायास कहते हैं "यह एक विस्तार विधि है।" मैं कभी भी पूरी तरह से समझ नहीं पाया कि इस उत्तर को पढ़ने तक वे किस तरह से विस्तार के तरीके "संलग्न" करते हैं। धन्यवाद!
प्रीत संघ की व्याख्या के अलावा:
Intellisense नीले तीर के साथ विस्तार के तरीकों को प्रदर्शित करता है (उदाहरण के लिए "एग्रीगेट <>" के सामने):
आपको ज़रूरत है एक
using the.namespace.of.the.static.class.with.the.extension.methods;
एक्सटेंशन विधियों को प्रदर्शित करने और उपलब्ध होने के लिए, यदि वे कोड का उपयोग करने की तुलना में एक अलग नामस्थान में हैं।
वे विस्तार विधियाँ हैं । एक पूरी नई धाराप्रवाह दुनिया में आपका स्वागत है । :)
मैंने दूसरे दिन ही इसे स्वयं सीखा: यह खोजशब्द उस पद्धति को परिभाषित करता है जिसमें उस वर्ग का विस्तार होता है जो इसे आगे बढ़ाता है। तो आपके उदाहरण के लिए, MyClass के पास फू नामक एक नई एक्सटेंशन विधि होगी (जो किसी भी पैरामीटर को स्वीकार नहीं करता है और एक रिटर्न देता है; इसे किसी अन्य सार्वजनिक विधि के रूप में उपयोग किया जा सकता है)।
"यह" पैरामीटर सूची में अगली कक्षा का विस्तार करता है
तो नीचे विधि हस्ताक्षर में "यह" "स्ट्रिंग" का विस्तार करता है। विधि के लिए एक सामान्य तर्क के रूप में लाइन फ़ंक्शन को पास की जाती है। सार्वजनिक स्थैतिक स्ट्रिंग [] स्प्लिट्सविलाइन (यह स्ट्रिंग लाइन)
उपरोक्त उदाहरण में "यह" वर्ग निर्मित "स्ट्रिंग" वर्ग में विस्तारित हो रहा है।