यह एक्सटेंशन विधियों, C # 3.0 की एक नई सुविधा घोषित करने के लिए सिंटैक्स है।
एक विस्तार विधि भाग कोड, भाग संकलक "जादू" है, जहां विजुअल स्टूडियो में इंटेलीसेंस की मदद से संकलक यह प्रकट करते हैं कि आपका विस्तार विधि वास्तव में प्रश्न में ऑब्जेक्ट पर एक उदाहरण विधि के रूप में उपलब्ध है।
मुझे एक उदाहरण देने दें।
स्ट्रिंग वर्ग पर कोई विधि नहीं है जिसे GobbleGobble नाम दिया गया है, तो चलिए एक विस्तार विधि बनाते हैं:
public static class StringExtensions
{
public static void GobbleGobble(this string s)
{
Console.Out.WriteLine("Gobble Gobble, " + s);
}
}
वर्ग का नाम सिर्फ मेरा नामकरण सम्मेलन है, इसे इस तरह नाम देना आवश्यक नहीं है, लेकिन इसे स्थिर करना होगा, जैसा कि विधि है।
उपरोक्त विधि घोषित करने के बाद, आप Visual Studio में, यह टाइप कर सकते हैं:
String s = "Turkey Baster!";
s.
डॉट के बाद, इंटलिसेंस के लिए प्रतीक्षा करें, और ध्यान दें कि वहां एक GobbleGobble विधि है, इस तरह कोड को पूरा करें:
String s = "Turkey Baster!";
s.GobbleGobble();
महत्वपूर्ण : जिस वर्ग को विस्तार विधि घोषित की गई है, वह विधि दिखाने के लिए संकलक और अंतर्मुखी प्रोसेसर के लिए उपलब्ध होना चाहिए। यदि आप मैन्युअल रूप से GobbleGobble में टाइप करते हैं, और Ctrl+ .शॉर्टकट का उपयोग करते हैं , तो यह फ़ाइल में निर्देशों का उपयोग करके आपको अधिकार प्राप्त करने में मदद नहीं करेगा।
ध्यान दें कि विधि का पैरामीटर गायब हो गया है। संकलक चुपचाप महत्वपूर्ण बिट्स के चारों ओर घूमेगा, जो हैं:
String s = "Turkey Baster!";
s.GobbleGobble();
^ ^
| +-- the compiler will find this in the StringExtensions class
|
+-- will be used as the first parameter to the method
इस प्रकार, उपरोक्त कोड कंपाइलर द्वारा इसे में बदल दिया जाएगा:
String s = "Turkey Baster!";
StringExtensions.GobbleGobble(s);
तो कॉल-टाइम पर, इसके बारे में कुछ भी जादुई नहीं है, यह केवल एक स्थिर पद्धति का कॉल है।
ध्यान दें कि यदि आपकी विस्तार विधि एक से अधिक पैरामीटर की घोषणा करती है, तो केवल पहला ही this
संशोधक का समर्थन करता है , और बाकी को विधि के भाग के रूप में निर्दिष्ट किया जाना चाहिए:
public static void GobbleGobble(this string value, string extra)
{ | |
... | |
} | |
| |
+--------------------------------------------+ |
| |
v |
s.GobbleGobble("extra goes here"); |
^ |
| |
+-----------------------------------+
लाइनक के कारण भाग में विस्तार विधियों को जोड़ा गया था, जहां सी # के लाइनक सिंटैक्स को खेल में वस्तुओं के लिए उचित रूप से नामित एक्सटेंशन विधियों के लिए देखा जाएगा, जिसका अर्थ है कि आप बस सही विस्तार की घोषणा करके किसी भी प्रकार के वर्ग में "परिचय" कर सकते हैं। तरीकों। बेशक, पूर्ण Linq समर्थन बहुत काम है, लेकिन यह संभव है।
इसके अलावा, अपने आप से विस्तार विधियां वास्तव में उपयोगी हैं, इसलिए इस पर पढ़ें।
यहाँ कुछ लिंक दिए गए हैं: