2011-03-18 10 views
11

वैकल्पिक विधि पैरामीटर के लिए रन-टाइम मानों का उपयोग करने का कोई तरीका भी है?सी # 4.0 में वैकल्पिक पैरामीटर संकलन-समय स्थिरांक की आवश्यकता क्यों है?

+0

संभावित डुप्लिकेट [C# में वैकल्पिक पैरामीटर के लिए डिफ़ॉल्ट मान के रूप में String.Empty का उपयोग नहीं कर सकता - तो बिंदु क्या है?] (Http://stackoverflow.com/questions/2701314/cannot-use-string-empty- एक-डिफ़ॉल्ट-मूल्य-के-एक-वैकल्पिक-पैरामीटर-इन-सी-तेज) – nawfal

उत्तर

11

वैकल्पिक पैरामीटर स्थिरांक होने की आवश्यकता है क्योंकि उन्हें एक विशेषता के मान के रूप में लिखा जाता है। इसलिए वे सभी प्रतिबंधों का वारिस करते हैं जो एक विशेषता मूल्य है।

रनटाइम मान को सीधे एन्कोड करने का कोई तरीका नहीं है। लेकिन अगर आप पास निम्नलिखित पैटर्न

public void MyApi(SomeType type = null) { 
    type = type ?? new SomeType(); 
    ... 
} 
+1

धन्यवाद, यह एक साफ चाल की तरह लगता है। जिज्ञासा से, क्या आप जानते हैं कि उन्हें विशेषताओं का उपयोग करके क्यों लागू किया जाता है? मुझे लगता है कि ढांचे में पहले से क्या है इसका पुन: उपयोग करना है? –

+1

@ जोआन आईआईआरसी यह गुणों के साथ किया जाता है क्योंकि इस तरह अन्य भाषाओं (वीबी.नेट) ऐसा करते हैं और इसलिए यह उनके साथ संगतता प्रदान करता है। – JaredPar

+1

@ जोआन: विशेषताओं का उपयोग करके, वे ऐसी भाषाएं नहीं तोड़ते हैं जिनके पास यह सुविधा नहीं है। याद रखें, .NET में सबकुछ एक ऐसे रूप में संकलित हो जाता है जिसे भाषा तटस्थ होने की आवश्यकता होती है ... विशेषताएँ किसी विशेष भाषा में वैकल्पिक पैरामीटर को संभालने का एक साफ तरीका है, अन्य .NET भाषाओं में परिवर्तनों को तोड़ने के बिना। –

5

वैकल्पिक पैरामीटर असेंबली में संकलित किए गए हैं और इस प्रकार (const के रूप में नामित किसी भी चीज़ की तरह) वे एक संकलन-समय स्थिर होना चाहिए।

और नहीं, आप वैकल्पिक पैरामीटर के रूप में निष्पादन-समय मानों का उपयोग नहीं कर सकते हैं।

+1

धन्यवाद लेकिन क्या यह रन-टाइम संदर्भ के संदर्भ के साथ संकलित नहीं हो सकता है? तो कुछ ऐसा कहें: यह। फिलेनाम, आदि एक ही कक्षा के भीतर? –

5

वैकल्पिक पैरामीटर संकलन समय पर निर्धारित कर रहे हैं, और विधि में प्रतिस्थापित करता है, तो आपके पास बहुत कम मानकों के साथ एक विधि कॉल के साथ मिल सकता है। विधि के आईएल में पैरामीटर में एक विशेषता जोड़ने के माध्यम से उन्हें संभाला जाता है।

इस प्रकार, उन्हें संकलन समय (दोनों सृजन के लिए, क्योंकि वे एक विशेषता है, लेकिन जब भी उपयोग किया जाता है) पर पूरी तरह से हल करने की आवश्यकता है। वैकल्पिक विधि पैरामीटर के लिए रनटाइम मानों का उपयोग करने का कोई तरीका नहीं है।

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