2010-07-09 9 views
5

कोड का यह टुकड़ा एक रूपरेखा 3.5 परियोजना में वी.एस. 2010 में ठीक संकलित (मैं ट्रिपल कि जाँच)वैकल्पिक तर्क कोड .NET 3.5 में संकलित करता है। क्यूं कर?

public LoggingClient(string uri = "net.msmq://localhost/logging"){...} 

क्यों? मुझे सी # 4 स्पेक (doc version), सेक्शन 21.1 में कुछ भी नहीं दिखाई देता है, जो कहता है कि यह पिछड़ा संगत होना चाहिए। यह कैसे है कि मुझे कोई संकलन त्रुटि नहीं मिलती है? क्या यह कुछ परिस्थितियों में चुपचाप विफल हो जाएगा?

+0

संभावित डुप्लिकेट की आवश्यकता है [क्या आप कोड लक्ष्यीकरण में वैकल्पिक पैरामीटर का उपयोग कर सकते हैं .Net 3.5? ] (http://stackoverflow.com/questions/1210679/can-you-use-optional-parameters-in-code-targeting-net-3-5) –

+0

सामान्य रूप से, सी # भाषा संस्करण के बीच कोई संबंध नहीं है और .NET संस्करण। –

उत्तर

8

परियोजना + गुण, टैब का निर्माण, नीचे स्क्रॉल करें, उन्नत। यदि आप स्रोत कोड संगतता को बनाए रखना पसंद करते हैं तो आप भाषा संस्करण को "सी # 3.0" में बदल सकते हैं।

लेकिन हां, आप वीएस -2010 में सी # 4.0 कंपाइलर का उपयोग कर रहे हैं, भले ही आपके द्वारा उपयोग किए जाने वाले लक्ष्य .NET संस्करण के बावजूद। कंपाइलर, आईएल का आउटपुट .NET 4.0 में नहीं बदला है। नहीं, आप गतिशील का उपयोग नहीं कर सकते हैं, इसके लिए एक .NET 4.0 केवल समर्थन असेंबली (Microsoft.CSharp.dll)

3

वैकल्पिक पैरामीटर केवल वाक्य रचनात्मक चीनी हैं - यदि आप इसे कॉल साइट पर निर्दिष्ट नहीं करते हैं, तो संकलक इसे डिफ़ॉल्ट मान भरता है। कुछ भी करने के लिए .NET ढांचे पर कोई निर्भरता नहीं है।

भी देखें Can you use optional parameters in code targeting .NET 3.5?

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