6

क्या ईवेंट हैंडलिंग वायरअप का संकलन समय प्रवर्तन करने का कोई तरीका है?इवेंट हैंडलिंग वायरअप लागू करना

तो उदाहरण के लिए कहें कि मेरे पास एक कक्षा है जो मानक EventHandler<T> का खुलासा करती है, क्या मैं यह सुनिश्चित कर सकता हूं कि इस कक्षा के किसी भी तत्काल उदाहरण OnMyEvent हैंडलर हैंडल हैं? (अधिमानतः संकलन समय पर)

ऐसा करने का एकमात्र तरीका मैं ऑब्जेक्ट कंटेनर के हिस्से के रूप में या रनटाइम पर प्रतिबिंब का उपयोग कर एक ईवेंटशेलर के माध्यम से कर सकता हूं। क्या कोई विकल्प हैं?

इसके अलावा, यदि सी # इस कार्यक्षमता की अनुमति नहीं देता है; जिज्ञासा से बाहर कोई अन्य भाषा करते हैं? उदाहरण के लिए, एक पर्यवेक्षक (या एकाधिक पर्यवेक्षकों) के रूप में -

उत्तर

3

घटनाक्रम आमतौर पर वस्तु के बुला कोड द्वारा वैकल्पिक पिए हैं। यह बहुत दुर्लभ है कि घटना को संभालने लागू है। संकलन समय पर किसी ईवेंट की सदस्यता लेने के सत्यापन के लिए कोई मानक भाषा/कंपाइलर निर्माण नहीं है (और मुझे संदेह है कि यह बहुत कठिन होगा, क्योंकि आप किसी भी समय कोड में किसी भी स्थान पर वैध रूप से सब्सक्राइब/सदस्यता समाप्त कर सकते हैं - संभवतः कई बार, यानी + हैंडलरए, + हैंडलरबी, -हैंडलरए, -हैंडलरबी - जो कि कोई ग्राहक नहीं है)।

परिदृश्य प्रस्तुत है, जहां यह है की आवश्यकता, बाद में करने के लिए निर्माता और अधिक उपयुक्त लगता है इसे पारित, लेकिन मैं शायद इस मामले (नहीं EventHandler<T>) में Func<...> या Action<...> का प्रयोग करेंगे। लेकिन वह व्यक्तिपरक है।

अन्य दृष्टिकोण:

  • यह एक अमूर्त वर्ग बनाने के लिए और उपवर्ग करने के लिए उपभोक्ता के लिए मजबूर और override एक या अधिक abstract सदस्यों
  • एक interface पैरामीटर है कि उपभोक्ता
+0

प्रदान करना होगा है जवाब के लिए धन्यवाद। :-) –

+0

+1 कुछ रूट मुद्दों और ओपी के गलत धारणाओं को संबोधित करने के लिए +1। मैं यह भी जोड़ूंगा कि यदि आपके पास एक बिल्ड स्क्रिप्ट है जो निर्माण के बाद यूनिट परीक्षण चलाती है, तो आप बिल्ड प्रक्रिया के दौरान कई चीजों को लागू कर सकते हैं कि अकेले संकलक नहीं कर सकते हैं। – Phil

संबंधित मुद्दे