What is Delegate in C#

C# in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C#.NET in Hindi | Page:908 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

What is Delegate in C#: जब हम C# में कोई Delegate Type Create करते हैं, तो C# Compiler Automatically उस Delegate Type के लिए एक .NET Framework के System.MulticastDelegate Class से एक sealed Class Derive करता है।

System.MulticastDelegate Class, System.Delegate Class के साथ मिलकर Delegate Object को ऐसा Infrastructure Provide करता है, जिससे एक Delegate Object उन Callback Methods की एक Invocation List Create कर पाता है, जिन्हें जरूरत होने पर बाद में Invoke किया जा सकता है।

C# Compiler Internally जो sealed Class Generate करता है, उसमें Invoke(), BeginInvoke() EndInvoke() नाम के तीन Methods Define करता है, जिनमें से Invoke() नाम का Method सबसे महत्वपूर्ण Method होता है, क्योंकि यही Method, Delegate Object की Invocation List के सभी Callback Methods को One by One Synchronous Manner में Invoke करने का काम करता है।

यानी Invocation List का पहला Callback Method जब तक पूरी तरह से Execute नहीं हो जाताए तब तक Invoke() Method Wait करता है और पहले Method के पूरी तरह से Execute हो जाने के बाद यही Invoke() Method, Internally Invocation List के अगले Callback Method को Automatically Invoke कर देता है। ये प्रक्रिया तब तक जारी रहती है, जब तक कि Invocation List के सभी Callback Methods पूरी तरह से Execute नहीं हो जाते।

चूंकि जब हम C# में delegate Keyword को Use करते हैं, तो हम Indirectly एक ऐसा sealed Class Type Define कर रहे होते हैं, जो कि System.MulticastDelegate Class से Inherit होता है, जो कि स्वयं System.Delegate Class से Inherited है।

इसलिए हमारे द्वारा Created Delegate Type Object में हमें बहुत सारे Inherited Members प्राप्त होते हैं, जिन्हें हम हमारे Delegate Object की Invocation List के Callbacks के साथ Use कर सकते है।

हालांकि System.MulticastDelegateSystem.Delegate Class Abstract Classes हैं, फिर भी हम इन्हें Directly Derive नहीं कर सकते। यदि हम ऐसा करने की कोशिश करते हैं, तो Compiler हमें Compile Time Error Return करता है।

इन Classes की Detailed Information प्राप्त करने के लिए हम Visual Studio के Object Browser Utility का प्रयोग कर सकते हैं और इन Classes द्वारा Provided विभिन्न Members की Functionalities के बारे में अधिक Detail से जान सकते हैं। फिर भी यहां हम कुछ बहुत ज्यादा उपयोग में आने वाले Members के बारे में कुछ Basic जानकारी देने की कोशिश कर रहे हैं।

Method Property

ये Property System.Reflection.MethodInfo Type का एक Object Return करता है जो Delegate द्वारा Maintained Static Method की Details को Represent करता है।

Target Property

जब हम Delegate Object के माध्‍यम से किसी Static Method को नहीं, बल्कि किसी Object Level Instance Method को Invoke करना चाहते हैं, तो Target Property एक Object Return करता है, जो कि Delegate द्वारा Maintain किए जाने वाले उस Instance Object के Method को Represent करता है। जबकि यदि इस Property में null हो, तो ये इस बात का Indication होता है कि Delegate Object द्वारा किसी Static Method को Invoke किया गया है।

Combine() Method

ये एक Static Method होता है जो किसी Method को Delegate द्वारा Maintained Invocation List में किसी Method को Add करता है। C# में हम इस Method को += Overloaded Operator या Shorthand Notation द्वारा Trigger करते हैं, जिसे हमने हमारे इसी Chapter की शु:आत के Programs में नए Callback Methods को Delegate की Invocation List में Add करने के लिए Use किया है।

GetInvocationList() Method

ये Method System.Delegate Type Objects का एक Array Return जिसका हर Element एक Callback Method को Represent करता है, जिसे Delegate Object द्वारा Invoke किया जा सकता हैं।

Remove() and RemoveAll() Method

ये Static Methods एक या सभी Callbacks को Invocation List से Remove करने का काम करते हैं। जबकि Remove() Method को हम -= Overloaded Operators द्वारा Automatically भी Invoke कर सकते हैं।

Delegates Type Safe होते हैं। यानी यदि हम Delegate Object की Invocation List में किसी ऐसे Callback Method को Add करते हैं, जिसका Signature व Return Type, Delegate के Signature व Return Type के समान नहीं है, तो C# Compiler, Compile Time Error Generate करता है।

File Name: UsingGetInvocationListMethod.cs
using System;

namespace CSharpDelegate
{
    delegate void MyDelegate();	//Delegate Declaration

    class DeleteCallbackFromMethodInvocationList
    {
        static void Main()
        {
            MyDelegate callMethod = new MyDelegate(Display);
            callMethod += Hello;
            callMethod = callMethod + Hi;
            callMethod += Bye;

            foreach (MyDelegate callback in callMethod.GetInvocationList())
            {
                Console.WriteLine("Method Name: " + callback.Method);
            }
        }

        public static void Display()
        {
            Console.WriteLine("This is Display() Method.");
        }

        public static void Hello()
        {
            Console.WriteLine("This is Hello() Method.");
        }

        public static void Hi()
        {
            Console.WriteLine("This is Hi() Method.");
        }

        public static void Bye()
        {
            Console.WriteLine("This is Bye Method.");
        }
    }
}

// Output:
   Method Name: Void Display()
   Method Name: Void Hello()
   Method Name: Void Hi()
   Method Name: Void Bye()

इस Program में निम्नानुसार तरीके से एक foreach Loop में अपने Create किए गए Delegate Object callMethod के साथ GetInvocationList() Method को Use किया है:

            foreach (MyDelegate callback in callMethod.GetInvocationList())
            {
                Console.WriteLine("Method Name: " + callback.Method);
            }

परिणामस्वरूप Return होने वाले हर Callback Method के नाम को callback.Method Property द्वारा Access किया है, ताकि Invocation List के सभी Methods का नाम हमें Output में दिखाई दे। फलस्वरूप ये foreach Loop, callMethod Delegate Object की Invocation List के सभी Callbacks के Signature को उपरोक्तानुसार Output में Display कर रहा है।

Anonymous Methods in C#
Lambda Expression in C#

C# in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C#.NET in Hindi | Page:908 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

Download All Hindi EBooks

सभी हिन्दी EBooks C, C++, Java, C#, ASP.NET, Oracle, Data Structure, VB6, PHP, HTML5, JavaScript, jQuery, WordPress, etc... के DOWNLOAD LINKS प्राप्‍त करें, अपने EMail पर।

Register करके Login करें। इस Popup से छुटकारा पाएें।