2010-06-07 21 views
5

का उपयोग कर सभी उदाहरणों में में उद्देश्य/अंतर मैं भी स्वतः उत्पन्न कोड मैं दृश्य स्टूडियो, घटनाओं निम्नलिखित कोड का उपयोग कर स्थापित कर रहे हैं के रूप में पा सकते हैं:क्या एक घटना प्रकार निर्माता

button1.Click += new System.EventHandler(this.button1_Click); 

लेकिन मैं कर सकते हैं कन्स्ट्रक्टर रैपर को छोड़कर इसे दृष्टि से क्लीनर भी लिखें:

button1.Click += this.button1_Click; 

जो भी ठीक संकलित करता है।

इन दोनों के बीच क्या अंतर है? और सबसे पहले इस्तेमाल किया जाने वाला/पसंदीदा क्यों है?

उत्तर

5

दूसरा फॉर्म (विधि समूह से एक प्रतिनिधि प्रकार के लिए निहित रूपांतरण) सी # 2 से पहले समर्थित नहीं था, इसलिए 2005 से पहले लिखा गया कोई भी ट्यूटोरियल आदि पहले फॉर्म का उपयोग करता।

इसके अलावा, आईआईआरसी विजुअल स्टूडियो पहले फॉर्म को स्वतः पूर्ण करता है। व्यक्तिगत रूप से मैं दूसरा पसंद करता हूं।

2

दूसरा एक वाक्य रचनात्मक चीनी है जो संकलक जादू के माध्यम से पहले व्यक्ति तक फैलता है।

पहला व्यक्ति पसंद किया जा सकता है क्योंकि घटना प्रकार कोड से छिपा नहीं है, और इस प्रकार बाद में पढ़ना आसान हो सकता है, लेकिन कार्यात्मक रूप से (और आईएल-वार) वे समान हैं।

button1.Click -= new System.EventHandler(this.button1_Click); 

का उपयोग नईकरने के लिए को दूर एक ईवेंट हैंडलर:

+0

टीएस, कुछ भी जादू के साथ जादू नहीं है, यहां तक ​​कि यादृच्छिक भी नहीं। – Patrick

+0

"कोई भी पर्याप्त उन्नत तकनीक जादू से अलग है" - एसीसी –

2

यह ईवेंट हैंडलर्स कि चीनी प्रेरित निकाल रहा है? हाँ।

यहां तक ​​कि पूर्ण प्रतिनिधि कन्स्ट्रक्टर सिंटैक्स भी चीनी है। एक प्रतिनिधि को एक विधि और लक्ष्य की आवश्यकता होती है। लक्ष्य स्वचालित रूप से निर्दिष्ट किए बिना असाइन किया जाता है। यह "यह" होगा। थोड़ा दुर्भाग्यपूर्ण, यह इस तथ्य को छुपाता है कि एक ईवेंट सदस्यता आपके वर्ग ऑब्जेक्ट का संदर्भ जोड़ती है जो इसे एकत्रित कचरा होने से रोक सकती है। यह C++/CLI वाक्य रचना में स्पष्ट है:

button1->Click += gcnew System::EventHandler(this, &button1_Click); 
दिलचस्प मोड़ है कि आप वास्तव में किसी अन्य वस्तु या वर्ग के एक घटना प्रबंधन विधि सदस्यता ले सकता है के साथ

। ऐसा नहीं है कि यह बहुत उपयोग करता है।

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