2015-02-09 9 views
24

में अभिव्यक्ति-बॉडी फ़ंक्शन सदस्यों की दक्षता और प्रदर्शन एक नए सी # 6.0 में हम लैम्ब्डा अभिव्यक्तियों का उपयोग करके विधियों और गुणों को परिभाषित कर सकते हैं।सी # 6.0

उदाहरण के लिए इस संपत्ति

public string Name { get { return First + " " + Last; } } 

अब के रूप में परिभाषित किया जा सकता है इस प्रकार है:

public string Name => First + " " + Last; 

अभिव्यक्ति-boided समारोह सदस्यों को आप यहां पा सकते हैं के बारे में जानकारी: http://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx

किसी को भी पता है यदि नया वाक्यविन्यास का उपयोग करते समय कोई ओवरहेड है? क्या यह एप्लिकेशन को धीमा कर सकता है (या दक्षता में सुधार) या शायद इससे कोई फर्क नहीं पड़ता?

+10

यह सिंटैक्स चीनी है, यह जेनरेट कोड को बिल्कुल प्रभावित नहीं करता है। अपने आप को मनाने के लिए ildasm.exe का प्रयोग करें। –

+1

मुझे यह सुविधा नहीं पता, लेकिन मुझे पूरा यकीन है कि प्रत्येक वाक्य रचनात्मक चीनी को एक ही कोड में संकलित किया जाता है। तो रनटाइम प्रदर्शन में कोई अंतर नहीं है। –

उत्तर

53

एक नए सी # 6.0 में हम लैम्ब्डा अभिव्यक्तियों का उपयोग करके विधियों और गुणों को परिभाषित कर सकते हैं।

नहीं, आप नहीं कर सकते। आप सिंटैक्स का उपयोग करके विधि और प्रॉपर्टी निकायों को परिभाषित कर सकते हैं जो को लैम्ब्डा अभिव्यक्ति की तरह दिखता है, जिसमें यह टोकन => का उपयोग करता है।

हालांकि, महत्वपूर्ण रूप से यह का मतलब है कि एक प्रतिनिधि प्रकार शामिल है। (जबकि एक लैम्ब्डा अभिव्यक्ति केवल एक संदर्भ में अनुमति दी जाती है जहां इसे एक अभिव्यक्ति वृक्ष या प्रतिनिधि प्रकार में परिवर्तित किया जाता है।)

यह पूरी तरह से वाक्य रचनात्मक चीनी है। आपके दो उदाहरण कोड स्निपेट सटीक उसी आईएल में संकलित होंगे। यह सिर्फ एक संपत्ति गेटटर या विधि के शरीर का प्रतिनिधित्व करने का एक अलग तरीका है।

+0

क्या यह तथ्य है कि वे सटीक उसी आईएल की गारंटी देते हैं या यह कार्यान्वयन विस्तार है? उदाहरण के लिए, मैं सोच रहा हूं कि क्या कुछ संकलक भविष्य में एक आक्रामक इनलाइनिंग को लागू करने के लिए चुना जा सकता है, बशर्ते कि इनलाइनिंग के लिए मूलभूत आवश्यकताओं को पूरा किया गया हो (गैर वर्चुअल)? – Kryptos

+0

@ क्रिप्टोस: अगर यह अभिव्यक्ति-शरीर के सदस्यों के लिए मान्य होगा, तो मैं उम्मीद करता हूं कि यह नियमित सदस्यों के लिए मान्य होगा। मुझे संदेह है कि हमें आईएल के बारे में कोई गारंटी दिखाई देगी क्योंकि कल्पना शायद ही कभी आईएल के बारे में बात करती है ... लेकिन कल्पना अच्छी तरह से कह सकती है कि दोनों बराबर हैं। –

6

वे एक ही आईएल में संकलित होंगे, आप इसे हमेशा करके और आईएल निकालने के लिए ildasm का उपयोग करके स्वयं का परीक्षण कर सकते हैं।

0

यह वाक्यविन्यास सदस्यों को लैम्ब्डा अभिव्यक्ति शैली में सरल लिखा जा सकता है। वह एकमात्र अंतर है।