जब 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को और अधिक विशिष्ट प्रकार में बदलने का नकारात्मक पक्ष होगा ?