2011-06-06 35 views
11
public delegate void SecondChangedHandler(
     object clock, 
     TimeInfoEventArgs timeInformation); 

    public event SecondChangedHandler SecondChanged; 

मैंने इस article पर आधारित घड़ी लिखी है। अब यदि मैं ईवेंट कीवर्ड को हटा देता हूं तो मुझे एक ही परिणाम मिलता है, तो घटना वास्तव में क्या करती है?इवेंट कीवर्ड वास्तव में क्या करता है?

उत्तर

12

यह अलग-अलग संकलित है। यह बनाता है तो कोई

mySecondChangedHandler.SecondChanged = SomeMethod(...); //overwrite 
mySecondChangedHandler.SecondChanged(...); //invoke 

लेकिन केवल

mySecondChangedHandler.SecondChanged += SomeMethod(...); 
mySecondChangedHandler.SecondChanged -= SomeMethod(...); 
+0

वास्तव में वह answear है जिसे मैं ढूंढ रहा था! : डी आप एक जीवन बचतकर्ता हैं :) –

+0

आगे बढ़ने के उत्तर के बगल में स्थित चेकबॉक्स पर क्लिक करें। यह खोज करते समय दूसरों को समाधान ढूंढना आसान बनाता है। – Joel

2

घटना कीवर्ड दो बातें

  • यह अनुमतियों की आपूर्ति करता है नहीं कर सकते। केवल वर्ग घटना को बढ़ा सकते हैं, फिर भी किसी भी बाहरी विधि कच्चे प्रतिनिधि
  • यह मेटाडाटा जो डिजाइनरों के लिए इस्तेमाल किया जा सकता और इस तरह
1

event कीवर्ड आवृत्ति को होस्ट करता है पर केवल तरीकों का मतलब है प्रदान करता आह्वान कर सकते हैं सेकेंड चेंजेड फील्ड इसका आह्वान कर सकता है। बाहरी प्रयास विफल हो जाएंगे।

6

event कीवर्ड एक निजी प्रतिनिधि क्षेत्र बनाता है, और सार्वजनिक event accessors की एक जोड़ी add_EventName और remove_EventName कहा जाता है। (details)

इसका मतलब है कि कक्षा के अंदर EventName लिखना प्रतिनिधि उदाहरण देता है, जिससे आप ईवेंट हैंडलर को कॉल या निरीक्षण कर सकते हैं।

कक्षा के बाहर, EventName वास्तव में मौजूद नहीं है; आप बस EventName += something और EventName -= something लिख सकते हैं, और संकलक इसे एक्सेसर्स में कॉल में परिवर्तित कर देगा। (एक संपत्ति की तरह)

अधिक जानकारी के लिए, this series of blog posts देखें।

+0

यह एक स्वीकार्य उत्तर होना चाहिए। –

1

event कीवर्ड एक प्रतिनिधि के लिए एक्सेसर्स की एक जोड़ी बनाता है। ये प्रभावी ढंग से दो विधियां हैं (add और remove) जिन्हें या सदस्यता से सदस्यता रद्द करने पर कहा जाता है।

आपके मामले में, आप "फ़ील्ड जैसी घटना" बना रहे हैं। कंपाइलर दृश्यों के पीछे एक प्रतिनिधि बनाता है, और आपको इसकी आमंत्रण सूची से सब्सक्राइब करने और सदस्यता समाप्त करने की अनुमति देता है। इसका मतलब है कि आपके पास एक प्रतिनिधि की सभी कार्यक्षमताएं हैं, लेकिन आप पहुंच प्रतिबंधित कर रहे हैं ताकि बाहरी दुनिया घटना को "संभाल" सके, लेकिन ईवेंट को बढ़ाएं (प्रतिनिधि को आमंत्रित न करें)।

हालांकि, आप एक घटना के लिए स्पष्ट रूप से अपने स्वयं के एक्सेसर्स भी बना सकते हैं, और ये अन्य चीजें कर सकते हैं (हालांकि ऐसा करने की कोई अच्छी वजह नहीं होने पर आमतौर पर अनुशंसा नहीं की जाती है)।

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