2010-04-29 6 views
12

मैंने using C# 3 features in C# 2 के बारे में एक लेख पढ़ा है जहां आप उदाहरण के लिए var x = 2; टाइप कर सकते हैं और यहां तक ​​कि यदि परियोजना 2.0 प्रोजेक्ट है, तो विजुअल स्टूडियो 2008 कंपाइलर इसे उठाता है और उसी कोड को उत्पन्न करता है जैसे कि आप int x = 2 टाइप करते हैं।सी # 2.0 में कीवर्ड var खराब का उपयोग कर रहा है?

लेकिन मुझे जो नहीं मिलता है, क्या आपको कुछ मामलों में ऐसा करना चाहिए? मैंने हमेशा सोचा था कि var कीवर्ड सी # 3 तक नहीं पहुंचा था .. यदि संकलक एक ही कोड उत्पन्न करता है और मैं सी # 3 कोड और सी # 2 कोड बिल्कुल वही टाइप कर सकता हूं, वास्तव में अंतर क्या है, क्योंकि सीएलआई एक जैसा है , सही? लिंक से

उद्धरण ऊपर

परदे के पीछे, संकलक नियमित .NET 2.0 कोड उत्पन्न करते हैं।

वहाँ .NET 2.0 कोड और .NET 3 कोड के बीच कोई अंतर है?

+3

आप मिश्रण सी # और नेट फ्रेमवर्क संस्करणों। "सी # 3 में सी # 3 सुविधाओं का उपयोग करना" - गलत कथन है। "नेट 2.0 में सी # 3 सुविधाओं का उपयोग करना चाहिए"। –

उत्तर

25

मुझे डर है कि आप सी # संस्करणों और .NET संस्करण अप मिश्रण कर रहे हैं रहा हूँ।

आप सी # 2.0 में var उपयोग नहीं कर सकते, संकलक सोचेंगे यह सिर्फ एक पहचानकर्ता है। लेकिन आप इसे सी # 3.0 लक्ष्यीकरण .NET 2.0 में उपयोग कर सकते हैं, क्योंकि var केवल एक भाषा (सी #) निर्माण है, न कि .NET निर्माण। .NET कंपाइलर इसे उत्पन्न सीआईएल में उपयुक्त प्रकार में अनुवाद करेगा, इसलिए जेआईटी कंपाइलर इसे कभी नहीं देख पाएगा और आप पूरी तरह से ठीक होंगे।

चूंकि वीएस -2008 कंपाइलर एक सी # 3.0 कंपाइलर है, इसलिए आपको var का उपयोग करने में कोई समस्या नहीं होगी, भले ही आप .NET संस्करण को लक्षित कर रहे हों।

+0

आह! यह वह जवाब था जिसे मैं ढूंढ रहा था। यह एक और सवाल हो सकता है, लेकिन क्या उस मामले में .NET 2 और .NET 3 के बीच परिणामी कोड के बीच कोई भिन्नता है, यानी कंपाइलर की चीज़ के बाद परिणामी चीज है? – Patrick

+0

सीआईएल बिल्कुल वैसा ही है जैसा आपने अपने असाइनमेंट में दाईं ओर की तरफ से अभिव्यक्ति के प्रकार को लिखा था; इससे कोई फर्क नहीं पड़ता कि आप किस .NET संस्करण को लक्षित कर रहे हैं। – Gorpik

+0

तो .NET 2 और .NET 3 के बीच का अंतर यह है कि कुछ अतिरिक्त कक्षाओं (जैसे LINQ) के साथ .NET 3 पैक और सिंटैक्स वास्तव में वही है (यदि आप VS2008 जैसे सी # 3 कंपाइलर का उपयोग करते हैं)? – Patrick

7

var सी # 3 भाषा में सिंथेटिक चीनी है जो वीएस -2008 उपयोग करता है। कोड अभी भी .net 2.0 संगत होने के लिए संकलित किया जा सकता है। आपके पास एकमात्र मुद्दा होना चाहिए यदि आपको उन फ़ाइलों को VS2005 में संपादित करने की आवश्यकता है।

+2

बेशक यह सी # 3 का हिस्सा है। यह .NET 3.5 का हिस्सा नहीं है, लेकिन यह एक अलग बात है। – Gorpik

+0

धन्यवाद गोर्पिक, उत्तर –

+0

उत्तर संपादित, आह, मैं देखता हूं। यह समझ आता है। इसलिए मैं अभी भी अपने वीएस 2008 के साथ .NET 2 पर लक्षित कर सकता हूं और वीएस 2005 उपयोगकर्ता अपने डीएलएल का उपयोग करने देता हूं। वास्तव में बहुत निफ्टी – Patrick

1

var के बारे में: यह शुद्ध वाक्यविन्यास चीनी और कंपाइलर चाल है। टाइपिंग var आप अभिव्यक्ति के दाएं हाथ के आधार पर अनुमान लगाने के लिए एक कंपाइलर से पूछते हैं। इसे आसानी से .NET 2.0 में संकलित किया जा सकता है। लिंक काम नहीं कर सकता क्योंकि यह .NET 3.5

+2

LINQ भावना में काम करेंगे कि संकलक संकलित करने के लिए कहाँ, SelectMany आदि तो यह असफल हो जायेगी करने के लिए कॉल करने के लिए क्वेरी भाव अनुवाद करेगा अगर यह किसी भी तरह के तरीकों नहीं मिल सकता है (जो आमतौर पर वास्तव में क्या होगा, जब से System.Linq.Enumerable करता है .NET 2.0 में मौजूद नहीं है), लेकिन यदि आप अपना खुद का कहां, SelectMany, आदि प्रदान करते हैं तो इसे उनसे बांधना चाहिए और काम करना चाहिए। – Joren

-2

var से असेंबली का उपयोग करता है, सी # 3.0 में अनाम प्रकारों के उदाहरणों को पकड़ने के लिए var को पेश किया गया था।

में .net2.0 वीएस -2008 या सी # कंपाइलर को वास्तविक प्रकार के साथ बदलना चाहिए जो डिज़ाइन-टाइम पर ज्ञात है और यदि आप कोडिंग करते समय पहले से ही जानते थे तो आप var का उपयोग क्यों करेंगे! :)

+2

'var' एक अज्ञात प्रकार का संकेत नहीं देता है, यह केवल इसे सक्षम बनाता है। जैसे 'var x = 1;', x int होगा, अज्ञात प्रकार नहीं। –

+0

सहमत - var किसी भी प्रकार का प्रतिनिधित्व कर सकते हैं। आप कोडिंग समय पर पहले से ज्ञात एक प्रकार के लिए इसका उपयोग नहीं करेंगे, आप इसके बजाय अज्ञात प्रकारों के लिए उपयोग करेंगे! –

+0

और मुझे जो भी मिलता है वह नकारात्मक वोट है ?? –

4

इसके उपयोग के संबंध में।

निष्पादन के संबंध में यह बुरा नहीं है, जैसा कि पहले से ही उल्लेख किया गया है कि यह सिंटैक्स चीनी है और संकलन समय पर प्रतिस्थापित हो जाता है।

कोडिंग करते समय, मुझे लगता है कि इसका उपयोग मिश्रित है। उदाहरण के लिए:

मुझे यह ठीक लगता है। यह देखने के लिए क्या मूल्य

var a = "test"; 

काफी इतना अच्छा नहीं है आसान है, बहुत से लोगों को IDE में स्क्रॉल करने के लिए वास्तव में कोड है, जो एक दर्द है समझना होगा।

var b = SomeReallyLongNameSpace.SubNamespace.Namespace.Class.Enum.Value1; 

यह ठीक है, आप जानते हैं कि परिणाम है क्योंकि एक स्पष्ट रूप से परिभाषित विधि है।

var c = GetString(); 

आप एक नज़र क्या दिया जाता है पर पता नहीं, इस उपयोगी नहीं है और बेहतर वर कीवर्ड का उपयोग करने के बजाय परिभाषित किया जा होगा।

var d = GetSomething(); 
+0

मैं सहमत हूं। यह सब पठनीयता के बारे में है। यदि आप जिस प्रकार को var को असाइन कर रहे हैं वह स्पष्ट है, तो 'var' का उपयोग करें। यदि यह स्पष्ट नहीं है, तो प्रकार के नाम का उपयोग करें। बेशक, जब अनाम प्रकारों की बात आती है तो आपके पास 'var' का उपयोग करने के अलावा कोई विकल्प नहीं है। – alimbada

+0

हाँ, ठीक है। यह वास्तव में नहीं था जो मैंने पूछा था।कीवर्ड var के बारे में बहुत सारे प्रश्न हैं। मुझे आश्चर्य हुआ कि मैं इसे अपने विजुअल स्टूडियो 2008 आईडीई में टाइप करने में सक्षम क्यों था, भले ही मेरी परियोजना को .NET 2. पर लक्षित किया गया था। – Patrick

+1

@ पैट्रिक के जवाब के लिए धन्यवाद, मैंने केवल प्रश्न को स्किम किया ... शीर्षक था "क्या इसका उपयोग कर रहा है सी # 2.0 में कीवर्ड var खराब? " और इसके भीतर निहित आपने पूछा "लेकिन मुझे जो नहीं मिलता है, क्या आपको कुछ मामलों में ऐसा नहीं करना चाहिए?"। मैं कुछ मामलों को उजागर करने की कोशिश कर रहा था जहां आपको निर्माण प्रक्रिया के बावजूद नहीं होना चाहिए। – Ian