C# Events

Introduction to C# Events

C# में Events एक ऐसा feature है जिसके द्वारा एक class किसी दूसरी class को कोई ख़ास event (घटना) generate होने पर notification भेज सकती है। दूसरी class notification को प्राप्त करके generate होने वाले event को (handler method द्वारा) handle करती है।

उदाहरण के लिए windows form या web applications में user द्वारा किसी button को click करने पर button class event generate करती है और दूसरी class को notification भेजती है जिसमें उस event के लिए handler method define किया गया होता है।

Notification पाकर दूसरी class handler method को execute करती है। Handler method में कोई भी action लिया जा सकता है। जैसे की कोई message show किया जा सकता है या कोई process initiate (शुरू) की जा सकती है।

जिस class में event generate होता है वह publisher या event source class कहलाती है। जो class उस event के लिए register या subscribe करती है वह subscriber या event destination class कहलाती है।

यह आवश्यक नहीं है की event generate करने वाली class और event handle करने वाली class अलग अलग हो। आप एक ही class से event generate भी कर सकते है और उसे handle भी कर सकते है।

मुख्यतः events किसी graphical user interface (windows forms और web applications) में user द्वारा button click, menu selection आदि actions लिए जाने पर generate होते है। Console applications में events का अधिक प्रयोग नहीं होता है।

एक C# windows forms या web application में button, selection menu, list boxes आदि control द्वारा generate होने वाले events के लिए आपको subscribe करना होता है। इसके लिए आप (उसी class में या किसी दूसरी class में) एक handler function define करते है जो event को handle करेगा और उसे delegate द्वारा event से associate करते है।

कोई control कौन कौन से event generate करता है यह Visual Studio Express में आसानी से देखा जा सकता है। इनमें से आप उस event को select कर सकते है जिसे आप handle करना चाहते है।

जैसे ही आप किसी event को select करते है तो IDE automatically एक event handler method और event के लिए subscribe करने वाला code add कर देता है। आपको सिर्फ event handler method में event को handle करने के लिए code लिखने की आवश्यकता होती है।

किसी event के लिए एक से अधिक subscribers हो सकते है। यानी की किसी event को handle करने के लिए एक से अधिक handler methods define किये जा सकते है। जब ऐसा होता है तो event generate होने पर सभी methods एक साथ call किये जाते है।

Handling C# Events

C# में events को 3 steps में handle किया जाता है।

  • Declaring delegate
  • Declaring event with delegate name
  • Declaring handler method

इन steps को निचे detail से समझाया जा रहा है।

Declaring Event Delegate

किसी class के अंदर event को declare करने से पहले उसके लिए delegate define करना आवश्यक होता है। यह delegate उस handler method से associated रहता है जो event generate होने पर call होता है।

इसके अलावा इस delegate को event declare करने के लिए भी use किया जाता है। इसलिए इस delegate को event delegate भी कहा जाता है। इसके बारे में आप आगे के section में जानेंगे।

Handler method का signature (return type और parameters का type और सँख्या) और delegate का signature identical (समान) होना चाहिए। यँहा पर delegates को method से associate करना नहीं बताया जा रहा है क्योंकि इसके लिए एक separate tutorial लिखी गयी है।

C# delegates के बारे में विस्तृत जानकारी के लिए कृपया C# Delegates in Hindi tutorial पढ़े।

Declaring Event

C# में events declare करने का general syntax निचे दिया जा रहा है।

event-keyword event-delegate-name event-name;

जैसा की आप ऊपर दिए गए syntax में देख सकते है C# में event declare करने के लिए event-keyword का प्रयोग किया जाता है। इसके बाद उस delegate का नाम लिखा जाता है जो event generate होने पर invoke होगा। इसके बाद event का नाम define किया जाता है।

Declaring Handler Method

Handler method वह method होता है जो delegate द्वारा invoke किया जाता है। इसे delegate के साथ associate किया जाता है। Handler method में वह code लिखा जाता है जो event generate होने पर execute होगा।

Example of C# Events

C# में events को handle करना निचे उदाहरण द्वारा समझाया जा रहा है।

using System;

public delegate string eveDel();  //declaring event delegate

class eventDemo //subscriber class
{   
     public string eventHandler()
     {
            return "Event generated and handled successfully";
     }
}

class eventDemoFinal  //publisher class
{

     static event eveDel bestEvent;  //Declaring event

     static void Main(string[] args)
     {
          string msg;
          eventDemo eD = new eventDemo();
          eveDel eDel = new eveDel (eD.eventHandler);  //Associating delegate & handler method
          eventDemoFinal.bestEvent += eDel; //Associating event and delegate
          msg=eventDemoFinal.bestEvent(); //Generating event
          Console.WriteLine(msg);
     }
}

ऊपर दिया गया उदाहरण निचे दिया गया output generate करता है।

Event generated and handled successfully