मैं बिल वैगनर द्वारा इफेक्टिव सी # पढ़ रहा हूं । में आइटम 14 - कम से कम डुप्लिकेट प्रारंभ तर्क है, वह नई वैकल्पिक पैरामीटर एक निर्माता में शामिल का उपयोग करने का निम्न उदाहरण दिखाता है:
public MyClass(int initialCount = 0, string name = "")
ध्यान दें कि वह ""
इसके बजाय इस्तेमाल किया string.Empty
।
वह टिप्पणी करता है:
आप [ऊपर के उदाहरण में] नोट करेंगे कि दूसरा निर्माता निर्दिष्ट नाम के बजाय डिफ़ॉल्ट पैरामीटर के लिए "" अधिक प्रथागत है
string.Empty
। ऐसा इसलिएstring.Empty
है क्योंकि एक संकलन-समय स्थिर नहीं है। यह स्ट्रिंग क्लास में परिभाषित एक स्थिर संपत्ति है। क्योंकि यह एक संकलित स्थिरांक नहीं है, आप इसे किसी पैरामीटर के लिए डिफ़ॉल्ट मान के लिए उपयोग नहीं कर सकते।
यदि हम string.Empty
सभी स्थितियों में स्थैतिक का उपयोग नहीं कर सकते हैं , तो क्या इसका उद्देश्य नहीं है? मैंने सोचा था कि हम इसका उपयोग यह सुनिश्चित करने के लिए करेंगे कि हमारे पास खाली स्ट्रिंग को संदर्भित करने के लिए एक प्रणाली-स्वतंत्र साधन है। क्या मेरी समझ गलत है? धन्यवाद।
अद्यतन
केवल एक अनुवर्ती टिप्पणी। MSDN के अनुसार:
प्रत्येक वैकल्पिक पैरामीटर में इसकी परिभाषा के भाग के रूप में एक डिफ़ॉल्ट मान होता है। यदि उस पैरामीटर के लिए कोई तर्क नहीं भेजा जाता है, तो डिफ़ॉल्ट मान का उपयोग किया जाता है। डिफ़ॉल्ट मान स्थिरांक होना चाहिए।
तब हम System.Environment.NewLine
या तो उपयोग नहीं कर सकते हैं या डिफ़ॉल्ट रूप में नए तात्कालिक वस्तुओं का उपयोग कर सकते हैं। मैंने अभी तक VS2010 का उपयोग नहीं किया है, और यह निराशाजनक है!