हर बार जब मैं सी # प्रोजेक्ट में गहराई से शुरू करता हूं, तो मैं कई घटनाओं के साथ समाप्त होता हूं जो वास्तव में केवल एक आइटम को पास करने की आवश्यकता होती है। मैं EventHandler
/EventArgs
अभ्यास के साथ चिपके रहते हैं, लेकिन मुझे क्या करना चाहते की तरह कुछ है:.NET EventHandlers - जेनेरिक या नहीं?
public delegate void EventHandler<T>(object src, EventArgs<T> args);
public class EventArgs<T>: EventArgs {
private T item;
public EventArgs(T item) {
this.item = item;
}
public T Item {
get { return item; }
}
}
बाद में, मैं हो सकता है मेरी
public event EventHandler<Foo> FooChanged;
public event EventHandler<Bar> BarChanged;
हालांकि, ऐसा लगता है कि नेट के लिए मानक प्रत्येक प्रकार की घटना के लिए एक नया प्रतिनिधि और EventArgs
सबक्लास बनाना है। क्या मेरे सामान्य दृष्टिकोण में कुछ गड़बड़ है?
संपादित करें: इस पोस्ट का कारण यह है कि मैंने इसे एक नई परियोजना में फिर से बनाया है, और यह सुनिश्चित करना चाहता था कि यह ठीक था। दरअसल, मैं इसे पोस्ट कर रहा था जैसा कि मैंने पोस्ट किया था। मैंने पाया कि एक सामान्य
EventHandler<TEventArgs>
है, इसलिए आपको जेनेरिक प्रतिनिधि बनाने की आवश्यकता नहीं है, लेकिन आपको अभी भी सामान्य
EventArgs<T>
कक्षा की आवश्यकता है, क्योंकि
TEventArgs: EventArgs
।
एक और संपादित करें: एक नकारात्मक पक्ष यह है (मेरे लिए) में निर्मित समाधान के अतिरिक्त शब्दाडंबर है:
public event EventHandler<EventArgs<Foo>> FooChanged;
बनाम
public event EventHandler<Foo> FooChanged;
यह ग्राहकों के लिए रजिस्टर करने के लिए के लिए एक दर्द हो सकता है आपके हालाँकि घटनाएं, क्योंकि सिस्टम नेमस्पेस डिफ़ॉल्ट रूप से आयात किया जाता है, इसलिए उन्हें अपने नामस्थान को मैन्युअल रूप से खोजना होगा, यहां तक कि रेसर्पर जैसे फैंसी टूल के साथ ... किसी के पास उससे संबंधित कोई विचार है?
सीआरयूडी-शैली के लिए आपने अन्य टिप्पणी में उल्लेख किया है, मेरे पास EntityEventHandler होगा जो स्वयं वर्णनात्मक होगा। –
आप जोड़ सकते हैं: FooArgs = Namespace.EventArgs का उपयोग करके; जो घटना को वापस साफ कर देगा - सार्वजनिक कार्यक्रम EventHandler FooChanged; –
Fraser