1,2, और 4 का उत्तर काफी समान है। विस्तार विधियां कुछ विशेष वाक्य रचनात्मक चीनी के साथ बस स्थिर तरीके हैं।यह:
public static void DoIt(string str) {
// ..
}
DoIt("test");
पूर्व विधि यह बहुत आसान है, हालांकि IntelliSense समर्थन प्रदान करने के बनाता है:
public static void DoIt(this string str) {
// ..
}
"test".DoIt();
प्रभावी रूप से के रूप में ही आईएल है। वर्ग की प्रतिबंध स्थिर होने की आवश्यकता है शायद यह सिर्फ एक डिजाइन निर्णय है, या शायद प्रदर्शन से संबंधित है।
# 3 का उत्तर यह है कि भाषा डिजाइनरों ने सिर्फ वाक्यविन्यास चुना है। सी # डेवलपर्स को this
पर आवृत्ति ऑब्जेक्ट को रेफर करने के लिए उपयोग किया जाता है। वे इसे blah
कह सकते थे, लेकिन यह स्पष्ट नहीं था कि इंस्टेंस ऑब्जेक्ट क्या है।
एक विस्तार विधि में इस कीवर्ड का उपयोग करने से सी # कंपाइलर को ExtensionAttribute के साथ चिह्नित करने के लिए भी कहा जाता है। यह विशेषता विस्तार विधियों को खोजने के लिए असेंबली के उपभोक्ताओं द्वारा उपयोग की जाती है।
http://msdn.microsoft.com/en-us/library/bb383977.aspx – Gabriel
मैं विशेष रूप से विस्तार विधियों के स्मृति आवंटन पहलू में रूचि रखता हूं, क्योंकि linq इन्हें हर जगह उपयोग करता है। –
शो ** CompilerServices.ExtensionAttribute ** – V4Vendetta