2009-12-10 8 views
10

एक नया ईवेंट हैंडलर बनाने का वास्तविक अंतर, फायदे और नुकसान क्या है, इसे सीधे ईवेंट में निर्दिष्ट करने के लिए क्या है?नए हैंडलर बनाम इवेंटहाउंडर को सीधे इसे

_gMonitor.CollectionChanged += new NotifyCollectionChangedEventHandler(OnCollectionChanged); 

_gMonitor.CollectionChanged += OnCollectionChanged; 
+0

संभवतः डुप्लिकेट [सी #: '+ = anEvent' और '+ = new EventHandler (anEvent)' के बीच अंतर] (http://stackoverflow.com/questions/550703/c-difference-between-anevent-and- नया-eventhandleranevent) – nawfal

उत्तर

10

बनाम सी # 2.0 में और ऊपर, वे समान हैं। सी # 1.2 (जो कि .NET 1.1 के साथ भेजा गया है) में, केवल पहला वाक्यविन्यास (new के साथ) संकलित करता है ;-p

दूसरा वाक्यविन्यास कुंजी प्रेस बचाता है, लेकिन वीएस इंटेलिजेंस आमतौर पर पहले सुझाव देगा। आखिरकार, यह बहुत कम अंतर बनाता है। मैं आमतौर पर कोड-नमूने ऑनलाइन में दूसरे वाक्यविन्यास का उपयोग करता हूं, क्योंकि यह (संकीर्ण) स्तंभ चौड़ाई पर जाने से बचाता है!

+0

मुझे लगता है कि पहला व्यक्ति स्मृति रिसाव के मुद्दों को बनाता है, लेकिन मुझे यह साबित करने के लिए कुछ भी नहीं मिला। लेकिन मुझे पिछले मुद्दों में ऐसे मुद्दों का सामना करना पड़ा है, विंडोज़ सेवा सिर्फ इसलिए बंद नहीं हो रही थी क्योंकि 'टाइमर। टिक + = नया हैंडलर_Tick (timer_TickMethod); 'टाइमर नहीं था। टिक + = टाइमर_TickMethod;' और सदस्यता रद्द करने में मदद नहीं मिली 'टाइमर' .Tick + = नया हैंडलर_Tick (timer_TickMethod); '। –

+0

@ हर्षबैड आप गलत हैं; वे *** वही चीज़ *** बिल्कुल संकलित करते हैं। जानकारी के लिए, प्रतिनिधि सदस्यता रद्द करें MethodInfo और * instance * पर एक मैच पर आधारित है; –

+0

सही ढंग से सदस्यता रद्द करने के लिए एक ही वास्तविक प्रतिनिधि उदाहरण होने की आवश्यकता नहीं है, '_gMonitor.CollectionChanged - = OnCollectionChanged' या '_gMonitor.CollectionChanged + = new NotifyCollectionChangedEventHandler (OnCollectionChanged)', क्या यह पहले विकल्प के साथ काम करेगा? –

3

कंपाइलर में new EventHandler प्रभावी ढंग से syntactic sugar बनाने के लिए पर्याप्त जानकारी उपलब्ध है।

यह जानता है कि आप किसी ईवेंट को ईवेंट हैंडलर संलग्न कर रहे हैं, क्योंकि केवल += और -= इस बिंदु पर मान्य हैं, इसलिए आपको यह बताने की आवश्यकता नहीं है कि क्या करना है।

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