2011-05-27 19 views
8

मेरे आखिरी नौकरी साक्षात्कार में मुझे पूछा गया कि एक ऐसी घटना को कैसे कार्यान्वित किया जाए जो किसी घटना को उजागर करता है और उस घटना के सब्सक्राइब होने पर नए ईवेंट ग्राहकों को सूचित करता है।इवेंट ग्राहक को सूचित करने के लिए कैसे करें

दूसरे शब्दों में, एक क्लास डेटा स्रोत अपडेट होने पर ग्राहकों को सूचित करने के लिए एक ईवेंट का खुलासा करता है; कई अन्य वर्ग घटना के किसी भी समय घटना की सदस्यता ले सकते हैं। जब कोई वर्ग ईवेंट की सदस्यता लेता है तो इसे डेटा स्रोत में संग्रहीत डेटा का नवीनतम संस्करण प्राप्त करने के लिए अधिसूचित किया जाना चाहिए, लेकिन अन्य वर्गों को अधिसूचित नहीं किया जाना चाहिए (वे पहले से ही अद्यतित हैं)।

उन्होंने मुझे एडहैंडलर विधि को ओवरराइड करने का सुझाव दिया है, लेकिन मैं केवल नए ग्राहक को कैसे सूचित करूं?

क्या .NET की कोई विशेषता है, मुझे पता नहीं है या मुझे हैंडलर (कुछ प्रकार के पर्यवेक्षक पैटर्न) में जोड़ने के दौरान ग्राहक वर्ग में एक विधि को परिभाषित करने की आवश्यकता है?

संपादित करें: मुझे लगता है कि मैं स्पष्ट नहीं हूं, इसलिए मैं इसे किसी अन्य तरीके से समझाने की कोशिश करूंगा। मान लीजिए कि मेरे पास पर्यवेक्षक पैटर्न है। जब कोई नया पर्यवेक्षक विषय की सदस्यता लेता है तो उसे विषय के अनुसार सबसे स्थायी डेटासोर्स मूल्यों के साथ तुरंत अपडेट किया जाता है। बाद में, जब डेटास्रोत के अंदर somethnig बदल जाएगा, तो विषय सभी पंजीकृत पर्यवेक्षकों को सामान्य रूप से सूचित करेगा। मुझसे पूछा गया है कि इसे .NET ईवेंट

उत्तर

15

आपकी शब्दावली ऊनी है - इसका मतलब क्या है "इसे सक्रिय होना चाहिए"? क्या आपका मतलब है कि ईवेंट हैंडलर को सदस्यता के बिंदु पर एक बार बुलाया जाना है? यदि ऐसा है, तो ऐसा कुछ लगता है:

private EventHandler foo; 

public event EventHandler Foo 
{ 
    add 
    { 
     if (value != null) 
     { 
      value(this, EventArgs.Empty); 
     } 
     foo += value; 
    } 

    remove 
    { 
     foo -= value; 
    } 
} 

हालांकि यह एक बहुत ही अजीब डिजाइन है।

यदि ऐसा नहीं है जो आप बाद में हैं, तो कृपया स्पष्टीकरण देने का प्रयास करें।

अधिक जानकारी के लिए मेरे article on events and delegates देखें।

+0

कोई स्थिति नहीं है जब कोई ग्राहक किसी ईवेंट में जोड़ता है तो उन्हें तुरंत नवीनतम मूल्य प्रदान करने की आवश्यकता होती है। यह मामला यह पैटर्न उपयोगी नहीं हो सकता है। – crypted

+0

मेरी समझ में, वे जानना चाहते थे कि केवल अंतिम ईवेंट ग्राहक को कैसे सूचित किया जाए, मैंने किसी भी नई सदस्यता पर इस कार्यक्रम को बढ़ाने का सुझाव दिया है, उन्होंने जवाब दिया है कि मैंने सभी ग्राहकों को सूचित किया होगा (और मेरी खराब अंग्रेजी को माफ कर दो, मैं "अधिसूचित" के साथ "सक्रिय" प्रतिस्थापित किया गया है) –

+2

@Stefano: वास्तविक संख्या। यह केवल नए प्रतिनिधि को उठाएगा, जो मूल्य में संग्रहीत है। मैं यह भी पूछूंगा कि यह अच्छा डिजाइन है या नहीं। मैं वास्तव में घटनाओं को भी समाप्त होने से पहले उठाने की उम्मीद नहीं करता हूं। क्लाइंट को नए सूचनाओं को खींचने देना बेहतर होगा, जब इसे घटनाओं को सुनना शुरू करने से पहले इसकी आवश्यकता होती है। – Euphoric

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

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