2011-02-08 21 views
26

मैं जानना चाहता हूं कि क्या अंतर है। वर्तमान में मैं इस चीज सीख रहा हूँ और मुझे लगता है ये सिर्फ एक ही हैं जैसे:लैम्ब्डा अभिव्यक्ति बनाम अनाम विधियां

delegate void X(); 

X instanceOfX; 

instanceOfX = delegate() { code }; 

instanceOfX =() => { code }; 

इसके अलावा, अगर लैम्ब्डा नए हैं, मैं सिर्फ लैम्ब्डा का उपयोग करें और चाहिए गुमनाम तरीकों पर भूल जाते हैं?

+3

भाषा के विकास के संदर्भ में सोचें। सी # 1 में, हमारे प्रतिनिधि थे। सी # 2 में, उन्होंने अज्ञात तरीकों को जोड़ा। सी # 3 जोड़ा lambdas। समान कार्यों को पूरा करने के आसान तरीके। विकास पर अधिक जानकारी के लिए, मैं आपको पुस्तक * सी # गहराई * पुस्तक देखने के लिए प्रोत्साहित करता हूं। –

उत्तर

19

हां, लैम्ब्डा अभिव्यक्तियां बहुत ही विशेष अज्ञात विधियां हैं।

हालांकि, कुछ गहरे मतभेद हैं। एरिक लिपर्ट के Lambda Expression vs. Anonymous Methods, Part One से शुरू करें और शेष series पर जारी रखें।

+6

तो उनके बारे में क्या खास है? – recursive

+0

उनके बारे में क्या खास है lojol

+1

@recursive: टाइप अनुमान। – jason

3

केवल अंतर यह है कि लैम्ब्डा को आसानी से Expression<Func<void>> पर डाला जा सकता है। प्रतिनिधि पूरी तरह से विधियों/बंद होते हैं, लेकिन लैम्ब्डा को अभिव्यक्ति वृक्ष में भी तोड़ दिया जाता है:

Expression<Func<int, int>> expr = x => x*2; // Expression tree 
Func<int, int> fun = x => x*2;    // function 
delegate int MyDelegate(int x); 
MyDelegate del = x => x*2;    // Same as function, delegate 
+1

ध्यान दें कि यह केवल लैमडास के उप-समूह के लिए संभव है: अभिव्यक्ति-लैमदास लेकिन बमदास का बयान नहीं। – CodesInChaos

+3

ध्यान दें कि "प्रतिनिधि" एक प्रतिनिधि प्रकार के लिए एक भयानक नाम है क्योंकि इसे सिस्टम के साथ आसानी से भ्रमित कर दिया जाएगा। इसकी बेस क्लास। –

+3

मैं क्षमा चाहता हूं। मैं आज भी कॉफी पी रहा हूं और मैं ईमानदारी से किसी अन्य नाम के बारे में सोच नहीं सकता था – kelloti

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