c# - क्या मुझे घटना को संभालने या आधार विधि को ओवरराइड करने के लिए एक नई विधि तैयार करनी चाहिए?



events event-handling (1)

मैं UIElement वर्ग से सी # का उपयोग करते हुए एक वर्ग का उपयोग कर रहा हूं, जहां मैं माउस और कीबोर्ड कार्यों जैसे इनपुट नियंत्रणों को नियंत्रित करना चाहता हूं। अब मुझे लगता है कि पहले से ही वर्चुअल विधियां हैं जो OnSomeEvent() कहते हैं और स्पष्ट रूप से मैं अपनी हैंडलिंग प्रक्रिया को फिट करने के लिए इन विधियों को ओवरराइड कर सकता हूं, या मैं बेस क्लास में परिभाषित सार्वजनिक ईवेंट को संभाल कर नए तरीके बना सकता हूं, और इन इनपुट इवेंट में उन्हें सदस्यता ले सकता हूं। कन्स्ट्रक्टर मैं इन दोनों विधियों को काम दोनों मानता हूं, लेकिन मुझे यह उम्मीद करने की उम्मीद है कि यह करने का अधिक पेशेवर या अधिक सलाहकार तरीका क्या है, और क्यों इसके साथ ही यह समझाने में मदद मिलेगी कि एमएस क्यों एक ही समय में इन दो तरीकों की पेशकश करता है।

यहां UIElement वर्ग की घटनाओं और विधियां हैं https://msdn.microsoft.com/en-us/library/system.windows.uielement(v=vs.110).aspx#Examples

और उद्धृत का एक पैराग्राफ

UIElement तत्व लेआउट विशेषताओं के लिए एक शुरुआती बिंदु प्रदान करता है, और आभासी विधियों को भी उजागर करता है जो व्युत्पन्न कक्षाओं को ओवरराइड कर सकते हैं, जो तत्व और इसके मूल तत्वों के लेआउट रेंडरिंग व्यवहार को प्रभावित कर सकते हैं। आम तौर पर तत्वों के लिए अधिकतर इनपुट और फ़ोकसिंग व्यवहार को UIElement वर्ग में भी परिभाषित किया गया है। इसमें कीबोर्ड, माउस और स्टाइलस इनपुट, और संबंधित स्थिति गुणों के लिए ईवेंट शामिल हैं इन घटनाओं में से कई घटनाओं का आयोजन किया जाता है, और कई इनपुट-संबंधी घटनाओं में एक बुबलींग रूटिंग संस्करण के साथ-साथ ईवेंट का सुरंग का संस्करण भी होता है। ये जुड़ी हुई घटनाएं आमतौर पर लेखकों को नियंत्रित करने के लिए सबसे बड़ी रुचि की घटनाएं हैं।


व्युत्पन्न वर्ग में, मैं आमतौर पर मौजूदा विधि को ओवरराइड करता हूं।

क्यूं कर? ईवेंट हैंडलर ओवरराइड विधि से कम विश्वसनीय हैं I उदाहरण के लिए, बाहरी कक्षाएं ईवेंट हैंडलर को साफ़ कर सकती हैं, लेकिन वे ओवरराइड में कोड बदल नहीं सकते हैं। यद्यपि आप अपने खुद के वर्ग को सील करना है, या आपकी विधि ओवरराइड हो सकती है।

विचार करने के लिए एक अन्य बिंदु यह है: क्या मैं नियंत्रण के तरीके को बदलना चाहता हूं? क्या मुझे कोड के सटीक निष्पादन पल पर नियंत्रण रखना होगा (हम बेस क्लास के कोड के पहले, उसके बाद या इसके बजाय कहते हैं)? यदि हां, तो आपको ओवरराइड का उपयोग करना होगा





uielement