डेलीगेट्स और इवेंट्स C# में कॉलबैक और इवेंट-ड्रिवन प्रोग्रामिंग के आधार हैं। इवेंट्स डेलीगेट्स के ऊपर एक रैपर हैं जो एनकैप्सुलेशन प्रदान करते हैं।
डेलीगेट्स (Delegates)
- मेथड के लिए टाइप-सेफ फंक्शन पॉइंटर।
- रनटाइम पर मेथड रेफरेंस बदल सकते हैं।
- सीधे असाइन/आह्वान योग्य:
del = Method; del(); - समस्या: बाहरी कोड डेलीगेट को ओवरराइड/क्लियर कर सकता है (
del = null)।
public delegate void Demo(string val);
इवेंट्स (Events)
- डेलीगेट पर आधारित, लेकिन केवल
+=और-=की अनुमति देते हैं। - बाहरी कोड इवेंट को सीधे असाइन या क्लियर नहीं कर सकता।
- पब्लिशर-सब्सक्राइबर पैटर्न लागू करता है।
- कीवर्ड:
event।
public delegate void Demo(string val);
public event Demo TestEvent;
// सब्सक्राइब
this.TestEvent += new Demo(DemoData);
// पब्लिश (केवल क्लास के अंदर)
TestEvent?.Invoke("Hello");
तुलना तालिका
| विशेषता | डेलीगेट | इवेंट |
|---|---|---|
| सीधा असाइनमेंट | ✅ अनुमत | ❌ प्रतिबंधित |
| नल असाइनमेंट | ✅ संभव | ❌ असंभव |
| आह्वान (Invoke) | कहीं से भी | केवल घोषक क्लास में |
| उद्देश्य | जनरल कॉलबैक | इवेंट नोटिफिकेशन |
सर्वोत्तम प्रथा
- पब्लिक एक्सपोज़र के लिए हमेशा
eventउपयोग करें। - इवेंट हैंडलर सिग्नेचर:
void Handler(object sender, EventArgs e)। EventHandler<TEventArgs>जेनेरिक डेलीगेट उपयोग करें।