C # में, क्या अंतर है
static readonly string MyStr;
तथा
const string MyStr;
?
C # में, क्या अंतर है
static readonly string MyStr;
तथा
const string MyStr;
?
जवाबों:
जब आप एक constस्ट्रिंग का उपयोग करते हैं , तो संकलक स्ट्रिंग के मान को संकलन-समय पर एम्बेड करता है ।
इसलिए, यदि आप constकिसी भिन्न असेंबली में किसी मान का उपयोग करते हैं , तो मूल असेंबली को अद्यतन करें और मान को परिवर्तित करें, अन्य असेंबली परिवर्तन नहीं देखेंगे जब तक कि आप इसे पुन: संकलित नहीं करते।
एक static readonlyस्ट्रिंग एक सामान्य क्षेत्र है जो रनटाइम पर देखा जाता है। इसलिए, यदि किसी भिन्न असेंबली में फ़ील्ड का मान बदल जाता है, तो असेंबली को लोड किए बिना, जैसे ही पुन: लोड किया जाएगा, परिवर्तन दिखाई देगा।
इसका मतलब यह भी है कि एक static readonlyस्ट्रिंग गैर-स्थिर सदस्यों का उपयोग कर सकती है, जैसे कि Environment.UserNameया DateTime.Now.ToString()। एक constस्ट्रिंग को केवल अन्य स्थिरांक या शाब्दिक का उपयोग करके आरंभ किया जा सकता है।
इसके अलावा, एक static readonlyस्ट्रिंग को स्थिर निर्माता में सेट किया जा सकता है; एक constस्ट्रिंग को केवल प्रारंभिक इनलाइन किया जा सकता है।
ध्यान दें कि static stringसंशोधित किया जा सकता है; आपको static readonlyइसके बजाय उपयोग करना चाहिए ।
constउपयोग केवल स्थिरांक - स्थिरांक मान के लिए किया जाना चाहिए , जो कभी भी , कभी भी बदल जाए।
private constमूल्यों के लिए उपयोग करता हूँ जो कड़ाई से नहीं बोल रहे हैं, निरंतर हैं; मूल रूप से यह constसूक्ष्म अनुकूलन उद्देश्यों के लिए दुरुपयोग है। मैं अपने "कभी, कभी, कभी" बयान से खड़ा होने जा रहा हूं , भले ही यह मुझे एक पाखंडी बना दे। ;)
यहाँ पेशेवरों और विपक्ष का एक अच्छा टूटना है :
तो, ऐसा प्रतीत होता है कि स्थिरांक का उपयोग तब किया जाना चाहिए जब यह बहुत कम संभावना है कि मूल्य कभी भी बदल जाएगा, या यदि कोई बाहरी एप्लिकेशन / लिबास निरंतर का उपयोग नहीं करेगा। रन-टाइम गणना की आवश्यकता होने पर, या यदि बाहरी उपभोक्ता एक कारक हैं, तो स्थैतिक आसानी से खेतों का उपयोग किया जाना चाहिए।
constpublic const string MyStr;
एक संकलन समय स्थिर है (आप उदाहरण के लिए एक विधि पैरामीटर के लिए डिफ़ॉल्ट पैरामीटर के रूप में इसका उपयोग कर सकते हैं), और यदि आप ऐसी तकनीक का उपयोग करते हैं तो यह बाधित नहीं होगा
static readonlypublic static readonly string MyStr;
है क्रम निरंतर। इसका मतलब है कि इसका मूल्यांकन तब किया जाता है जब एप्लिकेशन लॉन्च किया जाता है और पहले नहीं। यही कारण है कि यह उदाहरण के लिए एक विधि (संकलन त्रुटि) के लिए डिफ़ॉल्ट पैरामीटर के रूप में उपयोग नहीं किया जा सकता है। इसमें संग्रहीत मूल्य को बाधित किया जा सकता है।
OQ ने static stringvs के बारे में पूछाconst । दोनों के अलग-अलग उपयोग के मामले हैं (हालांकि दोनों को स्थिर माना जाता है)।
वास्तव में निरंतर मूल्यों (जैसे प्रकाश की गति - लेकिन यहां तक कि यह माध्यम पर निर्भर करता है) के लिए कॉन्स्ट का उपयोग करें। इस सख्त गाइडलाइन का कारण यह है कि कॉन्स्टेबल वैल्यू असेंबली इन असिस्टेंस इन असेंबलीज में इस्तेमाल की जाती है, जिसका मतलब है कि आपके पास वर्जनिंग इश्यूज हो सकते हैं, कॉन्सल को डेफिनिशन की जगह में बदलाव करना चाहिए (यानी यह कंटेंट नहीं होना चाहिए। आख़िरकार)। ध्यान दें कि यह private constखेतों को भी प्रभावित करता है क्योंकि आपके पास विभिन्न विधानसभाओं में आधार और उपवर्ग हो सकते हैं और निजी क्षेत्र विरासत में मिले हैं ।
स्थैतिक क्षेत्रों को उस प्रकार से बांधा जाता है जिसे वे भीतर घोषित करते हैं। उनका उपयोग उन मूल्यों का प्रतिनिधित्व करने के लिए किया जाता है जो किसी दिए गए प्रकार के सभी उदाहरणों के लिए समान होना चाहिए। इन फ़ील्ड्स को जितनी बार चाहें उतनी बार लिखा जा सकता है (जब तक कि यह आसानी से निर्दिष्ट न हो)।
यदि आपका मतलब static readonlyबनाम है const, तो मैं static readonlyलगभग सभी मामलों के लिए सिफारिश करूंगा क्योंकि यह भविष्य का प्रमाण है।
आप static readonly stringकेवल staticक्लास के कंस्ट्रक्टर या वैरिएबल इनिशियलाइज़र के मूल्य को बदल सकते हैं, जबकि आप किसी constस्ट्रिंग के मूल्य को कहीं भी नहीं बदल सकते ।