2012-04-25 13 views
7

मैं प्रबंधित प्रकार या जेनेरिक फ़ंक्शंस के सदस्य फ़ंक्शंस के लिए डिफ़ॉल्ट तर्क क्यों नहीं घोषित कर सकता हूं? C# 4.0Named and Optional Arguments पेश किया; CLI के लिए एक समान बात है?सी ++/सीएलआई वैकल्पिक तर्क

मुझे समझ नहीं नहीं क्यों इस तरह की एक प्रणाली की घोषणा करने के लिए संभव नहीं है:

void Optional(int argument = 0); 

और फिर जब मैं Optional(); फोन संकलक में इस कॉल के अनुवाद नहीं करता है: Optional(0);

उत्तर

8

ऐसा लगता है कि सी ++/सीएलआई कंपाइलर उस के लिए सही आईएल निर्देश नहीं छोड़ता है। यह .param [1] = int32(0) निर्देश को उत्सर्जित नहीं करता है, जो सी # डिफ़ॉल्ट मानकों को पहचानने के लिए उपयोग करता है। यदि आप ILDasm में जेनरेट की गई असेंबली खोलते हैं, तो आप इसे देखेंगे।

एक तरह से संकलित किSystem::Runtime::InteropServices नाम स्थान में स्थित विशेषताओं Optional और DefaultParameterValue उपयोग करने के लिए होगा, लेकिन सी # डिफ़ॉल्ट पैरामीटर के लिए उन का उपयोग नहीं करता है, तो वर्तमान में वहाँ एक अधिभार बनाने के आसपास कोई आसान तरीका है। https://stackoverflow.com/a/4974528/93652

+0

तो C++/CLI संकलक यह नहीं पता कि यह निर्देश उत्पन्न करने के लिए:

आप सवाल उन विशेषताओं यहाँ के बारे में पूछ पा सकते हैं। मुझे आशा है कि वीएस (12?) के साथ समस्या हल हो जाएगी। – gliderkite

+0

मुझे आशा है कि भी। दिलचस्प लगता है कि भाषाएं इसे अलग-अलग संभालती हैं। मैंने सुना है कि VB.Net गुणों का उपयोग करके करता है। तो मुझे लगता है कि दोनों गुण और निर्देश उत्पन्न किए जाने पर यह सबसे अच्छा होगा। – Botz3000

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