2010-09-20 8 views
6

सी # प्रतिनिधियों को हमेशा मुझे समझना मुश्किल रहा है और इसलिए logicchild's article on The Code Project web site titled "C# Delegates: Step by Step" में घूमने में मुझे बहुत खुशी हुई। सी # प्रतिनिधियों को समझाने का उनका एक संक्षिप्त तरीका है और मैं आपको इसकी सिफारिश कर सकता हूं।सी # प्रतिनिधि को आरंभ करने के लिए "सही" तरीका क्या है?

//create a new instance of the delegate class 
    CalculationHandler sumHandler1 = new CalculationHandler(math.Sum); 
    //invoke the delegate 
    int result = sumHandler1(8, 9); 
    Console.WriteLine("Result 1 is: " + result); 

और

CalculationHandler sumHandler2 = math.Sum; 
    //invoke the delegate 
    int result = sumHandler2(8, 9); 
    Console.WriteLine("Result 2 is: " + result); 

जहां गणित वर्ग

public class Math 
{ 
    public int Sum(int x, int y) 
    { 
     return x + y; 
    } 
} 

के रूप में परिभाषित किया गया है: हालांकि, बाहर उदाहरण की कोशिश में, मुझे लगता है कि एक प्रतिनिधि को प्रारंभ करने के दो तरीके, मुख्य रूप से कर रहे हैं तो कौन सा "सही" तरीका है और क्यों?

उत्तर

7

वे दोनों सही हैं, लेकिन method group conversion, जो दूसरा विकल्प 2.0 (आईआईआरसी) में जोड़ा गया था। अर्थात। यदि आप कंपाइलर के पुराने संस्करण का उपयोग कर रहे हैं तो आपको पहले विकल्प का उपयोग करने की आवश्यकता है। अन्यथा अतिरिक्त टाइपिंग वास्तव में अनावश्यक है।

3

मैं हमेशा पठनीयता के लिए पहली विधि का उपयोग करता हूं। दूसरा विकल्प यह गणित को प्रकट करता है। सम एक संपत्ति है और परिणाम लौट रहा है जो एक गणना हैडलर है। व्यक्तिगत रूप से, मुझे लगता है कि यह भ्रमित है।

+6

वाह। बहुत सारे अपराध "पठनीयता के लिए" प्रतिबद्ध हैं, और उनमें से प्रमुख स्पष्ट, संक्षिप्त कोड के बजाय लंबे, ठोस कोड लिख रहे हैं। यह पठनीयता के विपरीत है। –

+0

मज़ा मैं पठनीयता के लिए दूसरे का उपयोग करता हूं। बस यह दिखाने के लिए चला जाता है कि पठनीयता व्यक्तिपरक –

+1

@ कोनराड है, जो लंबे समय से स्वचालित रूप से समेकित नहीं होती है। और छोटा स्वचालित रूप से पठनीय के बराबर नहीं है। RegEx दिमाग में आता है ... तथ्य यह है कि "लंबा" तरीका सी # में सबकुछ काम करता है। छोटा रास्ता संभावित रूप से भ्रमित है। मैं शायद ही कभी गणना गणना करता हूं sumHandler1 = नई गणना हैडलर (गणित। एसयूएम); अपराध। – colithium

0

दोनों तरीके ठीक हैं, लघु संस्करण केवल सी # कंपाइलर सेवा है। पहला तरीका अधिक वर्बोज़ है और दिखाता है कि वास्तव में क्या होता है। दोनों संस्करण एक ही आईएल कोड उत्पन्न करते हैं, जो वास्तव में पहले संस्करण के करीब है।

1

दोनों सही हैं।

दूसरा दूसरा कंपाइलर द्वारा प्रदान किया गया शॉर्टकट है, दोनों वास्तव में पहले के कोड को बनाते हैं।

पहला व्यक्ति वास्तव में क्या हो रहा है, यह स्पष्ट रूप से दिखाता है, जबकि दूसरा एक कम कोड है, इसलिए इसे पढ़ना आसान है (एक बार जब आप समझते हैं कि वास्तव में क्या हो रहा है)।

1

Personnaly मैं दूसरा विकल्प (विधि समूह रूपांतरण) पसंद करता हूं। एक कार्यात्मक दृष्टिकोण से मुझे प्रतिनिधि के प्रकार की परवाह नहीं है, क्योंकि इससे मुझे कोई संकेत नहीं मिलेगा कि प्रतिनिधि द्वारा दी गई विधि क्या कर रही है। विधि का नाम (कम से कम चाहिए) हालांकि मुझे प्रतिनिधि का आह्वान होने पर क्या होने जा रहा है और दूसरे विकल्प में मुझे विधि नाम खोजने की आवश्यकता नहीं है।

एक साइड नोट के रूप में यदि आप ईवेंट हैंडलर पंजीकरण के साथ स्वत: पूर्ण का उपयोग करते हैं तो वीएस आपको पहला संस्करण देगा। Resharper पहले संस्करण में कोड के दूसरे और निशान हिस्से को अनावश्यक के रूप में उपयोग करेगा।

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