2008-08-25 12 views
14

सी के साथ तारों की घटनाओं के बीच अंतर, कोड की इन दो पंक्तियों के बीच अंतर (यदि कोई है) क्या है?"नए"

tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick); 

और

tmrMain.Elapsed += tmrMain_Tick; 

दोनों बिल्कुल एक ही काम करने के लिए दिखाई देते हैं। क्या सी # बस मान लेता है कि जब आप बाद वाले टाइप करते हैं तो आप पूर्व का मतलब रखते हैं?

+0

ठीक है, वे दोनों ठीक काम करते हैं। फिर विज़ुअल स्टूडियो बाद वाले ओवर को क्यों चुनता है जब यह ईवेंट ईवेंट हैंडलर स्टब बनाता है? – Vaibhav

+0

यह सुविधा विजुअल स्टूडियो 2005 से पहले की तारीखें थी, जिसने छोटे वाक्यविन्यास को पेश किया था। – SLaks

उत्तर

25

मैं इस

static void Hook1() 
{ 
    someEvent += new EventHandler(Program_someEvent); 
} 

static void Hook2() 
{ 
    someEvent += Program_someEvent; 
} 

किया और फिर कोड पर ILDASM भाग गया।
जेनरेट एमएसआईएल बिल्कुल वही था।

तो अपने प्रश्न का उत्तर देने के लिए, हाँ वे वही बात हैं।
संकलक बस का निष्कर्ष निकालते है कि आप चाहते हैं someEvent += new EventHandler(Program_someEvent);
- आप यह MSIL

2

मैं क्या कोई अंतर नहीं होता नहीं लगता कि में दोनों ही मामलों में नए EventHandler वस्तु बनाने देख सकते हैं। निश्चित रूप से पुनर्विक्रेता का कहना है कि पहली पंक्ति में अनावश्यक कोड है।

-1

मैं एक तरह से वास्तव में बताने के लिए MSIL पर कोड के लिए उत्पादन किया देखने के लिए होगा लगता है .. आदत एक अच्छा कसौटी होने के लिए ..

मैं अजीब चिंताओं यह किसी तरह जी सी के साथ गड़बड़ हो सकता है कि नहीं है। यह अजीब लगता है कि नए प्रतिनिधि प्रकार की घोषणा करने के सभी उपरांत होंगे यदि इसे इस तरह से करने की आवश्यकता नहीं है, तो आप जानते हैं?

0

new XYZEventHandler को सी # 2003 तक की आवश्यकता नहीं थी, और आपको सी # 2005 में अनावश्यक कोड को छोड़ने की अनुमति थी?

4

यह (.NET 1.x दिन) होता था कि लंबे फार्म को ऐसा करने का एकमात्र तरीका था। दोनों मामलों में आप Program_someEvent विधि को इंगित करने के लिए एक प्रतिनिधि को नए बना रहे हैं।

2

एक छोटी सी offtopic:

आप एक प्रतिनिधि (new EventHandler(MethodName)) का दृष्टांत सकता है और (यदि उपयुक्त हो) कि उदाहरण के पुन: उपयोग।

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

  • कोई संबंधित समस्या नहीं^_^