winforms - C# Raising event to inherited classes only -


मेरे पास एक सामान्य उपयोगकर्ता नियंत्रण है:

  सार्वजनिक आंशिक वर्ग SearchBoxGeneric & lt; T & gt; : UserControl {सुरक्षित वर्ग RecordFoundEventArgs {सार्वजनिक टी रिकॉर्ड {get; निजी सेट; } सार्वजनिक RecordFoundEventArgs (टी रिकॉर्ड) {this.Record = record; }} संरक्षित घटना EventHandler & lt; RecordFoundEventArgs & gt; RecordFound; // खोज बटन से सार्वजनिक शून्य खोज () {// 1। डीबी / 2 में रिकार्ड के लिए खोजें व्युत्पन्न वर्गों के लिए ईवेंट बढ़ाएं}}  

मेरे पास ऐसे उपयोगकर्ता नियंत्रण हैं जो इस सामान्य नियंत्रण से वंचित हैं अब जब मैं डीबी से एक रिकॉर्ड की खोज करता हूं, तो मैं घटना को विरासत में मिली नियंत्रण में बढ़ाऊंगा।

मैं यह कैसे कर सकता हूं?

  सार्वजनिक शून्य खोज () {टी रिकॉर्ड = FindRecordCore (); अगर (रिकॉर्ड! = डिफ़ॉल्ट (टी)) {var रिकॉर्डफ़ाउंड = रिकॉर्डफ़ाउंड; अगर (रिकार्डफ़ाउंड! = रिक्त) रिकार्डफाउंड (यह, नया रिकॉर्डफॉउन्डएवेंटअर्ज (रिकॉर्ड)); }}  

घटनाओं के लिए सामान्य पैटर्न का अनुसरण करने के लिए आपको एक विशिष्ट OnXyz विधि जोड़ना चाहिए:

  संरक्षित वर्चुअल शून्य ओनरिकॉर्डफाउंड (रिकॉर्डफ़ाउंड एवेंट एआरजी ई) {var रिकॉर्डफाउंड = रिकॉर्डफ़ाउंड; अगर (रिकॉर्डफ़ाउंड! = नल) रिकॉर्डफ़ाउंड (यह, ई); }  

इस तरह शामिल:

  सार्वजनिक शून्य खोज () {टी रिकॉर्ड = FindRecordCore (); यदि (रिकार्ड! = डिफ़ॉल्ट (टी)) ऑनरेकॉर्डफ़ाउंड (नया रिकार्डफ़ॉंन्डएवेंटएरग्स (रिकॉर्ड)); }  

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

  संरक्षित वर्चुअल शून्य ऑनरेकॉर्डफाउंड (टी रिकॉर्ड) {/ / व्युत्पन्न कक्षाएं "ईवेंट" को संभाल लेंगी} सार्वजनिक शून्य खोज () {टी रिकॉर्ड = खोजकरॉर्डकोर (); अगर (रिकॉर्ड! = डिफ़ॉल्ट (टी)) ऑनरॉर्डफ़ाउंड (रिकॉर्ड); }  

यदि आप सामान्य ईवेंट पैटर्न का पालन करते हैं तो भी ईवेंट सार्वजनिक था (और आपके पास सुरक्षित OnRecordFound विधि) आमतौर पर व्युत्पन्न क्लास को OnRecordFound () और घटना RecordFound ओवरराइड करना चाहिए बाहरी संस्थाओं द्वारा उपयोग किया जाता है।


Comments

Popular posts from this blog

c# - SignalR: "Protocol error: Unknown transport." when navigating to hub -

Camel ProducerTemplate possible memory leak -

javascript - Adhering to a max length setting with jshint -