जब C # में प्रोग्रामिंग की घटनाओं, यह एक प्रतिनिधि बनाने के लिए सलाह दी जाती है:
delegate XEventHandler(object sender, XEventArgs e);
मेरा प्रश्न, प्रतिनिधि का पहला तर्क पर है object sender
। क्या यह हमेशा एक सामान्य होना है object
? प्रकार का एक प्रेषक होने से object
हमेशा इसके समान कोड आता है।
val = ((ConcreteType)sender).Property;
या, और भी अधिक क्रिया,
ConcreteType obj = sender as ConcreteType
if (obj != null) { ... }
दृढ़ता से टाइप किए गए प्रेषकों के खिलाफ एक तर्क यह है कि अन्य ऑब्जेक्ट प्रकार के बारे में चिंता किए बिना घटना को आगे बढ़ा सकते हैं । हालांकि यह जीयूआई वातावरण में समझ में आता है, मुझे यकीन नहीं है कि यह जीयूआई के बाहर लाभान्वित हो सकता है।
क्या होगा यदि प्रेषक का वर्ग हमेशा ज्ञात होता है (कम से कम एक अमूर्त वर्ग के रूप में)? उदाहरण के लिए, यदि मैं ListChanged
एक अमूर्त List
वर्ग में एक घटना को लागू कर रहा हूं , और यदि अन्य वर्ग इसे प्राप्त करने जा रहे हैं (उदाहरण LinkedList
के लिए ArrayList
), तो क्या यह सब मेरे प्रतिनिधि को टाइप के प्रेषक के साथ परिभाषित करने के लिए सही है List
?
delegate ListChangedEventHander(List sender, ListChangedEventArgs e);
या, पारंपरिक object sender
को और अधिक विशिष्ट प्रकार में बदलने का नकारात्मक पक्ष होगा ?