Wednesday, October 20, 2021

C# Extension method in Hindi


एक्सटेंशन मेथड


मान लीजिए किसी क्लास या स्ट्रक्चर के भीतर कुछ मेथड्स पहले से बने हुए हैं और आप उस क्लास या स्ट्रक्चर में एक और नया मेथड जोड़ना चाहते हैं। परन्तु नया मेथड जोड़ने में कई प्रकार की सीमाएं या बाधाएं हो सकती हैं, जैसे:-
१) ऐसा हो सकता है कि उस क्लास या स्ट्रक्चर का सोर्स कोड उपलब्ध ना हो, अतः उस क्लास या स्ट्रक्चर के भीतर कोई नया मेथड बनाना सम्भव नहीं होगा।
२) ऐसा हो सकता है कि वह क्लास एक sealed क्लास हो जिसके कारण उसका चाइल्ड क्लास बनाना सम्भव नहीं होगा। अतः इन्हेरिटेंस का उपयोग कर चाइल्ड क्लास में नये मेथड को नहीं बनाया जा सकता है।
३) ऐसा भी हो सकता है कि वर्तमान मेथड्स स्ट्रक्चर में हो तो स्ट्रक्चर को इन्हेरीट कर कोई नया स्ट्रक्चर नहीं बना सकते हैं क्योंकि स्ट्रक्चर इन्हेरीटेंस को सपोर्ट नहीं करता है।
४) ऐसा भी हो सकता है कि क्लास को इन्हेरीट करना सम्भव हो तथापि यहाँ यह दिक्कत हो सकती है कि चाइल्ड क्लास बनाकर नए मेथड को बनाया जाए तो कोड का रीकंपाइलेशन होगा परंतु प्रोजेक्ट का उद्देश्य वर्तमान कोड का रीकंपाइलेशन न करना हो।

इस तरीके से हम देखते हैं कि किसी क्लास या स्ट्रक्चर का नया मेथड बनाना कई परिस्थितियों में संभव नहीं होता है और यदि संभव हो तो भी वर्तमान क्लास को एक्सटेंड या विस्तारित करने के प्रति प्रोजेक्ट मैनेजर अनिच्छुक हो। 

ऊपर की बाधाओं को ध्यान में रखते हुए अगर किसी क्लास के लिए नए मेथड बनाना हो तो ऐसा होना चाहिए कि नये मेथड अर्थात एक्सटेंशन मेथड को एक बिल्कुल नये क्लास में बनाया जाये और इस क्लास को पुराने क्लास के साथ युक्त bind कर दिया जाये। युक्त करने से अभिप्राय पुराने क्लास के ऑब्जेक्ट के द्वारा नये मेथड को कॉल करने से है। 

एक्सटेंशन मेथड का क्लास स्टैटिक क्लास होना चाहिए ताकि नए एक्सटेंशन मेथड की बाइंडिंग दूसरे क्लास के साथ लोडिंग के समय ही हो जाए। हम जानते हैं कि स्टैटिक क्लास के भीतर केवल स्टैटिक मेथड होते हैं। 

एक्सटेंशन मेथड की यह खासियत होती है इनके साथ एक पैरामीटर अवश्य होता है। यह पहला पैरामीटर उस क्लास या टाइप को रेफर करता है जिस क्लास या टाइप के साथ एक्सटेंशन मेथड को युक्त bind करना होता है। दूसरे शब्दों में कोडिंग की दृष्टि से एक्सटेंशन मेथड स्टैटिक मेथड होते हैं जबकि व्यवहार की दृष्टि से एक्सटेंशन मेथड नन स्टैटिक मेथड होते हैं। व्यवहार की दृष्टि से एक्सटेंशन मेथड स्टैटिक क्लास के मेथड ना होकर उस क्लास के मेथड होते हैं जिस क्लास के ऑब्जेक्ट के द्वारा यह कॉल किया जाता है।

ध्यान दीजिए कि जब एक्सटेंशन मेथड वाले क्लास के सोर्स कोड को कंपाइल किया जाता है तो क्लास के लोडिंग के समय ही पुराने क्लास के साथ बाइंडिंग हो जाती है और पुराने कोड के रीकंपाइलेशन की आवश्यकता नहीं होती है। इस तरह, नया क्लास के कोड का केवल कंपाइलेशन होता है, साथ ही उस नए क्लास के मेथड को पुराने क्लास के साथ bind कर देंने से पुराने क्लास के ऑब्जेक्ट के द्वारा नये एक्सटेंशन मेथड को कॉल किया जा सकता है। 

नये क्लास के मेथड को पुराने क्लास के साथ bind करने के लिए नए क्लास के मेथड जिसे कि एक्सटेंशन मेथड कहते हैं के पहले पैरामीटर के रूप में पुराने क्लास का रेफेरेंस देना होता है, साथ ही उस रेफेरेंस टाइप के पहले this कीवर्ड का प्रयोग किया जाता है। इस बात को हम उदाहरण के द्वारा बेहतर तरीके से समझ सकते हैं।
  
using System;

namespace ExtensionMethodEx
{
    class Class1
    {
        public void Display()
        {
            Console.WriteLine("Normal Method in Class1.");
        }
    }
}

using System;

namespace ExtensionMethodEx
{
    static class Class2
    {
        public static void ExtensionMethod1(this Class1 class1)
        {
            Console.WriteLine("This extension method bound with Class1 objects.");
        }
    }
}

using System;

namespace ExtensionMethodEx
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 c1 = new Class1();
            c1.Display();
            c1.ExtensionMethod1();
            //Another approach to call
            Class2.ExtensionMethod1(c1);
            Console.ReadKey();
        }
    }
}
  

उपसंहार:-
C# प्रोग्रामिंग के अंतर्गत एक्सटेंशन मेथड का अर्थ किसी क्लास में नए मेथड को जोड़ने के लिए किया जाता है। जब इस नये मेथड को क्लास के साथ बाँध दिया जाता है तो उस क्लास के ऑब्जेक्ट के द्वारा इस नये मेथड को कॉल किया जा सकता है। ऐसा नहीं है कि नए मेथड को क्लास के भीतर कोडिंग करके जोड़ा जाए, वस्तुतः एक्सटेंशन मेथड का निर्माण एक नये स्टेटिक क्लास के अंदर किया जाता है और इस नये स्टेटिक क्लास को उस क्लास के साथ बाँध दिया जाता है जिसके साथ उसे शामिल करना होता है। अतः एक्सटेंशन मेथड से अभिप्राय किसी स्टेटिक क्लास के स्टेटिक मैथड को किसी दूसरे क्लास के साथ बाँधने से है ताकि उस स्टेटिक मेथड को एक नन स्टेटिक मेथड की तरह प्रयोग करते हुए दूसरे क्लास के ऑब्जेक्ट के द्वारा कॉल किया जा सके।

एक क्लास का स्टेटिक मेथड बनाने का कई कारण हो सकता है जैसे
१) उस क्लास का सोर्स कोड उपलब्ध ना हो, अतः उस क्लास के भीतर कोई नया मेथड बनाना सम्भव नहीं हो।
२) वह एक sealed क्लास हो जिसके कारण उसका चाइल्ड क्लास बनाना सम्भव नहीं हो
३) वह क्लास न हो कर एक structure हो, जैसा कि आप जानते हैं कि स्ट्रक्चर का इन्हेरिटेंस करना संभव नहीं है अतः उस स्ट्रक्चर का कोई नया मेथड इन्हेरिटेंस के द्वारा सम्भव नहीं है।

© अजीत कुमार, सर्वाधिकार सुरक्षित।

इस आलेख को उद्धृत करते हुए इस लेख के लिंक का भी विवरण दें। इस आलेख को कॉपीराइट सूचना के साथ यथावत साझा करने की अनुमति है। कृपया इसे ऐसे स्थान पर साझा न करें जहाँ इसे देखने के लिए शुल्क देना पडे।

No comments:

Post a Comment

Hot Topics