मैं .NET इवेंट मॉडल की अपनी समझ से काफी खुश हूं। मुझे लगता है कि मैं सिस्टम की एक छोटी सी बारीकियों को गलत समझ सकता हूं।
जब मैंने अपनी कक्षाओं में घटनाओं को डालना शुरू किया तो मैं मानक तरीके का उपयोग करूँगा जैसे:
public event EventHandler<MyEventArgs> MyEvent;
इसका मतलब यह था कि इस कार्यक्रम में सदस्यता लेने वाले किसी भी तरीके की आवश्यकता होगी:
void HandleThatEvent(object sender, MyEventArgs args){...}
जो अच्छा है, लेकिन मैंने पाया कि मैं प्रेषक के बारे में शायद ही कभी ध्यान रखूंगा, इसलिए इसने बहुत सारे तरीके के हस्ताक्षर फूला हुआ था।
इसलिए मैंने अपने स्वयं के प्रतिनिधि प्रकार घोषित करने के लिए स्विच किया
public delegate void MyEventHandler(SomeClass argument);
जो अव्यवस्था पर कट गया, लेकिन मुझे एक छोटी सी समस्या के साथ छोड़ दिया जब यह लिखावट में आया:
eventImplmentor.MyEvent += HandleThatEvent;
.
.
.
void HandleThatEvent(/*oh, um, what arguments does it take? Intellisense isn't telling me*/)
इसलिए मुझे प्रतिनिधि की घोषणा पर वापस जाना होगा और देखना होगा और फिर वापस जाकर उन्हें लिखना होगा, या इसे संकलित करना होगा और प्रतीक्षा की जाएगी।
तो अब इसके बजाय, मैं बस का उपयोग कर रहा हूँ Action
, Action<T>
या जो भी टेम्पलेट फिट बैठता है।
public event Action<SomeClass> MyEvent;
ताकि मैं इस घटना पर मँडरा जाऊँ और बताया जा सके कि यह किन मापदंडों की अपेक्षा करता है।
मेरा सवाल, आखिरकार: क्या सी # में घटनाओं की घोषणा करने के लिए सबसे अच्छा अभ्यास है? क्या मुझे EventHandler<T>
रास्ते में वापस जाना चाहिए , या Action<T>
स्वीकार्य है?