ऐसा होने के कारण मैंने संकलन समय तक प्रकार की परिभाषा में देरी की है, इंटेलिजेंस (और कुछ और शामिल) कैसे पता चलता है कि मैं किस प्रकार का विस्तार कर रहा हूं? सी # बस शीर्ष स्तर सिस्टम के लिए डिफ़ॉल्ट है। ऑब्जेक्ट?
जो लोग कहते हैं कि यह System.Object
पर एक एक्सटेंशन गलत है। एक के लिए, यह विधि बॉक्स मान प्रकार इनपुट नहीं होगी, लेकिन System.Object
पर परिभाषित एक एक्सटेंशन विधि होगी।
आपके द्वारा परिभाषित विस्तार विधि एक सामान्य रूप से पैरामीटरयुक्त विस्तार विधि है। इसे किसी भी प्रकार पर लागू किया जा सकता है जो सामान्य प्रकार पैरामीटर के रूप में मान्य है।
यदि आप पहले से ही विस्तार तरीकों के बारे में सोच नहीं रहे हैं, तो इससे आपको थोड़ा बेहतर समझने में मदद मिल सकती है। एक्सटेंशन विधियां सिर्फ एक चाल है कि भाषा विनिर्देश हमें दूर जाने देता है। विस्तार विधियां वास्तव में स्थैतिक वर्गों में केवल स्थिर विधियां हैं जिन्हें हम कॉल कर सकते हैं जैसे कि वे उदाहरण विधियां थे। तो
static class Foo {
public static void M(this object obj) { }
}
एक स्थैतिक वर्ग में केवल एक स्थिर विधि है। आप इसे इस तरह कह सकते हैं:
Foo.M(obj);
लेकिन यह एक उदाहरण विधि है जैसे हम इसे कॉल कर सकते हैं:
obj.M();
इस प्रकार, आप एक सामान्य विस्तार विधि है जब, एक मिनट के लिए बंद करो और इसके बारे में सोचो एक स्थिर कक्षा में एक स्थिर पद्धति के रूप में
static class Foo {
public static void M<T>(this T obj) { }
}
आप इस तरह यह कह सकते हैं:
object obj;
Foo.M(obj);
या आप इसे इस तरह से कॉल कर सकते हैं:
obj.M();
संकलक जो आप लिखने के लिए कोई फर्क नहीं है।
तो, अब आप इसे नियमित जेनेरिक विधि के रूप में सोच रहे हैं। लेकिन निश्चित रूप से जब आप इस परिप्रेक्ष्य से इसके बारे में सोचते हैं तो आप समझते हैं कि संकलक आपको इस विधि को सामान्य प्रकार पैरामीटर के रूप में मान्य किसी भी प्रकार पर आमंत्रित करने देगा। और इस प्रकार, अब आप समझते हैं कि इसे सामान्य प्रकार पैरामीटर के रूप में मान्य किसी भी प्रकार पर एक एक्सटेंशन विधि के रूप में क्यों माना जा सकता है।
LINQ के साथ इसका क्या संबंध है? – BoltClock
@ बोल्टक्लो'साइनिकर्न लिनक में पूरे धाराप्रवाह sytnax विस्तार विधियों पर आधारित है। –
@RoyiNamir तथ्य यह है कि LINQ विस्तार विधियों पर आधारित है, LINQ से संबंधित सभी एक्सटेंशन विधियों को नहीं बनाता है। – Servy