2012-05-30 16 views
8

आज मैं एक निर्माता में डिफ़ॉल्ट पैरामीटर मान बना रहा था।मैं डिफ़ॉल्ट पैरामीटर मान के रूप में String.Empty का उपयोग क्यों नहीं कर सकता?

public SomeClass (String something = String.Empty) 
{ 
    // ... 
} 

संकलक शिकायत की।

"कुछ" के लिए डिफ़ॉल्ट पैरामीटर मान संकलन-समय स्थिर होना चाहिए।

मैं इस धारणा के तहत था कि स्ट्रिंग क्लास पर खाली एक संकलन-समय स्थिर था।

.field public static initonly string Empty 

एम आई संकलन समय का अर्थ निरंतर missunderstanding, या यह सिर्फ अधिक wackyness कि मैं स्वीकार करने की जरूरत है?

+0

त्रुटि संदेश इंगित करता है कि आपकी इंप्रेशन 'बिल्कुल सही नहीं है। –

+1

यहां अधिक पूर्ण चर्चा: http://stackoverflow.com/questions/507923/why-isnt-string-empty-a-constant –

उत्तर

4

this एसओ प्रश्न स्वीकार्य उत्तर स्ट्रिंग क्यों नहीं है। निरंतर व्यवहार करें? है:

कारण यह है कि स्थिरता के साथ स्थैतिक रूप से उपयोग किया जाता है, अप्रबंधित कोड के साथ उपयोग के कारण, जैसा कि माइक्रोसॉफ्ट द्वारा साझा स्रोत सामान्य भाषा इंफ्रास्ट्रक्चर 2.0 रिलीज में इंगित किया गया है। देखने के लिए फ़ाइल sscli20 \ clr \ src \ bcl \ system \ string.cs है।

खाली निरंतर खाली स्ट्रिंग मान रखता है। हमें स्ट्रिंग कन्स्ट्रक्टर को कॉल करने की आवश्यकता है ताकि संकलक इसे शाब्दिक के रूप में चिह्नित न करे।

इसे शाब्दिक के रूप में चिह्नित करने का अर्थ यह होगा कि यह उस क्षेत्र के रूप में दिखाई नहीं देता है जिसे हम मूल से एक्सेस कर सकते हैं।

मुझे यह जानकारी कोडप्रोजेक्ट पर इस आसान article से मिली है।

+0

मैंने सोचा कि आपको इसे डुप्लिकेट के रूप में चिह्नित करना होगा? जवाब नहीं देना – Harrison

2

static readonly फ़ील्ड संकलन-समय स्थिर नहीं है। यह सिर्फ एक स्थिर क्षेत्र है, जिसे कक्षा के बाद बदलना नहीं चाहिए जिसमें इसे प्रारंभ करना समाप्त हो गया है।

वर्तमान .net कार्यान्वयन में आप इसे प्रतिबिंब के साथ भी बदल सकते हैं, जो वास्तव में अजीब व्यवहार की ओर जाता है।

आप इसके बजाय "" का उपयोग कर सकते हैं, जो एक स्ट्रिंग अक्षर के रूप में एक संकलन समय स्थिर है।

1

readonly फ़ील्ड रन-टाइम स्थिर है। ऑब्जेक्ट (या कक्षा, यदि फ़ील्ड static है) तक यह मान तक सीमित नहीं होगा।

संकलन-समय स्थिरांक अक्षर हैं (जैसे "" - जो अनिवार्य रूप से के समान ही है) और कुछ भी const चिह्नित है।

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

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