एक्सटेंशन मेथड की मदद से आप पहले से मौजूद टाइप में नए मेथड जोड़ सकते हैं। इसके लिए नया डेराइव्ड टाइप बनाने, दोबारा कंपाइल करने या मूल टाइप में कोई और बदलाव करने की ज़रूरत नहीं पड़ती। इन्हें स्टैटिक मेथड के रूप में परिभाषित किया जाता है, पर कॉल इंस्टेंस मेथड सिंटैक्स से किया जाता है। इनके पहले पैरामीटर के आगे this मॉडिफायर लगाया जाता है, जो बताता है कि मेथड किस टाइप पर काम करता है। इन्हें नेमस्पेस के लेवल पर स्कोप में लाया जाता है।
public static int WordCount(this string str)
{
return str.Split().Length;
}
"Hello World".WordCount();
// => 2
इस अभ्यास में आप लॉग लाइनों पर काम करेंगे।
हर लॉग लाइन एक स्ट्रिंग होती है, जिसका प्रारूप ऐसा होता है: "[<LEVEL>]: <MESSAGE>"।
तीन अलग-अलग लॉग लेवल होते हैं:
INFOWARNINGERRORआपके पास कई काम हैं। हर काम में आपको एक लॉग लाइन मिलेगी और उसके साथ कुछ करना होगा।
पिछले महीने के लॉग देखने पर आपको दिखता है कि टेस्ट मैसेज हमेशा किसी खास सबस्ट्रिंग के बाद ही होता है। आपको लगता है कि आने वाले समय में कभी आपको यह मैसेज निकालना पड़ेगा। इसलिए आप इसके लिए एक हेल्पर मेथड बनाने का फैसला करते हैं।
(static) LogAnalysis.SubstringAfter() एक्सटेंशन मेथड बनाइए, जो एक स्ट्रिंग डेलिमिटर लेता है और उस डेलिमिटर के बाद वाली सबस्ट्रिंग लौटाता है।
var log = "[INFO]: File Deleted.";
log.SubstringAfter(": "); // => returns "File Deleted."
आगे जाँच करने पर आपको दिखता है कि लॉग लेवल हमेशा चौकोर ब्रैकेट ([ और ]) के बीच ही होता है। आपको भी लगता है कि आने वाले समय में कभी आपको लॉग लेवल निकालना पड़ेगा। इसलिए आप इसके लिए एक और हेल्पर मेथड बनाने का फैसला करते हैं।
(static) LogAnalysis.SubstringBetween() एक्सटेंशन मेथड बनाइए, जो दो स्ट्रिंग डेलिमिटर लेता है और उन दोनों डेलिमिटर के बीच आने वाली सबस्ट्रिंग लौटाता है।
var log = "[INFO]: File Deleted.";
log.SubstringBetween("[", "]"); // => returns "INFO"
(static) LogAnalysis.Message() एक्सटेंशन मेथड बनाइए, जो लॉग में मौजूद मैसेज लौटाता है।
var log = "[ERROR]: Missing ; on line 20.";
log.Message(); // => returns "Missing ; on line 20."
(static) LogAnalysis.LogLevel() एक्सटेंशन मेथड बनाइए, जो लॉग का लॉग लेवल लौटाता है।
var log = "[ERROR]: Missing ; on line 20.";
log.LogLevel(); // => returns "ERROR"
Exercism पर साइन अप कीजिए और C# को 62 कॉन्सेप्ट178 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।