2009-02-17 11 views
24

Const क्लाइंट कोड में बेक किया गया है। Readonly नहीं है। लेकिन const तेज है। हालांकि थोड़ा सा हो सकता है।जब, यदि कभी, क्या हमें कॉन्स का उपयोग करना चाहिए?

सवाल यह है कि, क्या कोई परिदृश्य है जहां आपको constreadonly से अधिक पसंद करना चाहिए? या फिर से बदलने के लिए, क्या हम व्यावहारिक रूप से के बजाय readonly का उपयोग बंद कर रहे हैं (ऊपर बताए गए बेकिंग चीज़ को ध्यान में रखते हुए)?

उत्तर

28

मेरा मानना ​​है कि केवल समय "स्थिरांक" उचित है जब वहाँ एक कल्पना है कि आप उस के खिलाफ कोडिंग कर रहे है कार्यक्रम आप लिख रहे हैं की तुलना में अधिक टिकाऊ है। उदाहरण के लिए, यदि आप HTTP प्रोटोकॉल को कार्यान्वित कर रहे हैं, तो "GET" के लिए एक कॉन्स सदस्य उचित है क्योंकि यह कभी भी नहीं बदलेगा, और क्लाइंट निश्चित रूप से कड़ी मेहनत कर सकते हैं कि उनके संकलित ऐप्स में यह चिंता किए बिना कि आपको बदलने की आवश्यकता होगी बाद में मूल्य

यदि किसी भी मौके पर आपको भविष्य के संस्करणों में मूल्य बदलने की ज़रूरत है, तो कॉन्स का उपयोग न करें।

ओह! और कभी भी मान लें कि कॉन्स एक पाठक क्षेत्र से तेज़ नहीं है जब तक कि आप इसे माप नहीं लेते। जेआईटी ऑप्टिमाइज़ेशन हैं जो इसे बना सकते हैं, इसलिए यह वास्तव में वही है।

+1

"अगर किसी भी मौके पर आपको भविष्य के संस्करणों में मूल्य बदलने की जरूरत है, तो कॉन्स का उपयोग न करें।" मैं आपके तर्क का पालन नहीं कर रहा हूं। निरंतर बिंदु का हिस्सा यह है कि आप इसे भविष्य के संस्करण में बदल सकते हैं। – Powerlord

+14

यदि स्थिर "आंतरिक" से अधिक सार्वजनिक है (या यदि यह केवल आंतरिक है लेकिन आपके पास InternalsVisibleTo है), तो आईएल कंपाइलर्स को असेंबली संदर्भों में निरंतर मान की प्रतिलिपि बनाने की अनुमति है। इसका मतलब है कि यदि आप एक नया संस्करण भेजते हैं और निरंतर बदलते हैं, तो अब आप अपने उपभोक्ताओं के साथ सिंक हो गए हैं। –

+1

@AndrewArnott स्पष्टीकरण के आखिरी बिट के लिए धन्यवाद, मुझे हिम्मत है कि यह एक महत्वपूर्ण बात है! – AgentKnopf

0

आप स्थिरांक का उपयोग करना चाहिए आप घोषणा में मूल्य निर्धारित कर सकते हैं और निर्माता के लिए प्रतीक्षा करने की जरूरत नहीं है, जब भी।

3

प्रारंभिक रूप से तब उपयोगी होता है जब प्रारंभिकता सीधे आगे नहीं होती है।
कॉन्स का उपयोग तब किया जा सकता है जब आप इसे संकलित करने से पहले मान के बारे में सुनिश्चित हों।

एक तरह से, केवल पढ़ने के लिए एक क्रम स्थिरांक & स्थिरांक एक संकलन समय निरंतर मूल्य है।

संपादित करें: यदि आप www.koders.com का उपयोग कर कुछ कोड को देखो, तो तुम कहाँ स्थिरांक इस्तेमाल किया जा सकता केवल पढ़ने का एक प्रयोग है कि वहाँ मिल जाएगा। मुझे लगता है कि इसके पीछे कारण यह हो सकता है कि यह कन्स्ट्रक्टर में संशोधित हो (यदि आवश्यकता हो)। कॉन्स (विशेष रूप से सार्वजनिक) के मामले में, आपके पास अपने कोड पर निर्भर ग्राहक कोड को तोड़ने का मौका है।

4

आप स्विच स्टेटमेंट में किसी मामले के रूप में एक कॉन्स वैल्यू का उपयोग कर सकते हैं, fwiw।

2

स्थिरांक केवल मूल्य प्रकार के लिए (, स्ट्रिंग स्थिरांक और बातिल के अलावा के रूप में श्री स्कीट ने बताया) वर्ग या संरचनाओं के लिए इस्तेमाल किया जा सकता है, और स्थिर क्षेत्रों के रूप में पहुंचा जा सकता है। एक कॉन्स का मान संकलन समय पर सेट होता है और इसे घोषित होने पर सेट किया जाना चाहिए।

पढ़ने के लिए कुछ भी उपयोग के लिए इस्तेमाल किया जा सकता है और या तो एक स्थिर या उदाहरण क्षेत्र हो सकता है। एक रीडोनली का मान रनटाइम पर सेट होता है और जिसे कन्स्ट्रक्टर कहा जाता है, उसके आधार पर अलग-अलग सेट किया जा सकता है।

स्थिरांक के अवलोकन के लिए Here's a good page, केवल पढ़ने के लिए और स्थिर कीवर्ड।

+0

गलत बाहर फ्लैट। मुझे लगता है कि आपने अपनी भाषाओं को भ्रमित कर दिया है - यह सी ++ है। – Arafangion

+0

मेरी गलती, किसी भी तरह, मैंने सोचा कि यह सी ++ था। लगता है * मैंने * अपनी भाषाओं को मिश्रित किया ... – Arafangion

+1

कॉन्स का उपयोग संदर्भ प्रकारों के साथ किया जा सकता है - यह केवल एकमात्र संदर्भ प्रकार स्थिरांक स्ट्रिंग स्थिरांक और शून्य हैं। –

15

Const vs readonly:

एक त्वरित सारांश मतभेद 'स्थिरांक' और 'केवल पढ़ने के लिए' सी # में बीच पर: 'स्थिरांक':

  • स्थिर नहीं हो सकता।
  • मूल्य का मूल्यांकन संकलित समय पर किया गया है।
  • केवल घोषणा में initiailized।

'केवल पढ़ने के लिए':

  • या तो उदाहरण के स्तर या स्थिर हो सकता है।
  • मूल्य का मूल्यांकन रन समय पर किया गया है।
  • घोषणा में या कन्स्ट्रक्टर में कोड द्वारा प्रारंभ किया जा सकता है।

सुधार: ऊपर राज्यों स्थिरांक स्थिर नहीं हो सकता। यह एक गलत नाम है। उनके पास स्थैतिक कीवर्ड लागू नहीं हो सकता क्योंकि वे पहले से ही स्थिर हैं।

तो आप स्थिर वस्तुओं के लिए कॉन्स्ट का उपयोग करते हैं जिन्हें आप संकलन-समय पर मूल्यांकन करना चाहते हैं।

+2

consts केवल स्थिर हैं, वे स्थिर कीवर्ड का उपयोग नहीं कर सकते हैं क्योंकि यह अनावश्यक – Logan5

+3

स्थिर नहीं हो सकता है? ऐसा नहीं है क्योंकि यह _always_ स्थिर है? – Svish

+0

मुझे लगता है कि नीचे –

0

कुंजी/मूल्य जोड़े की कुंजी के लिए कॉन्स का एक अच्छा उपयोग है। उदाहरण के लिए, यदि आप अभी भी ऐपसेटिंग (एप्लिकेशन सेटिंग्स के बजाय) का उपयोग कर रहे हैं, तो यह वास्तव में लोड कॉन्फ़िगरेशन सेटिंग की कुंजी का नाम नहीं समझता है। यदि यह कई जगहों पर प्रयोग किया जाता है, तो कुंजी को एक स्थिरांक में चिपकाएं।

1

आपको संशोधक को प्राथमिकता देना चाहिए जो रनटाइम के दौरान परीक्षण किए गए संशोधक पर संकलित समय पर परीक्षण किया जाता है (इस संदर्भ में केवल पढ़ने के लिए)। और आपको हमेशा उन संशोधकों का उपयोग करना चाहिए जो आपको आवश्यक अर्थपूर्ण समर्थन का समर्थन करते हैं। अगर कुछ संशोधित करने के लिए नहीं है - इसे सुरक्षित रखें या कोई इसे कुछ लिख देगा (दुर्घटना या अज्ञानता से)।

3

मैं आमतौर पर केवल उन चीजों के लिए आधार का उपयोग करता हूं जो मुझे पता है कभी भी ठंड के तापमान जैसे परिवर्तन नहीं।

मैं चीजें हैं जो संभवतः परिवर्तन सकता है के लिए केवल पढ़ने के लिए पसंद करते हैं। यदि कोई परिवर्तन होता है तो इस तरह मुझे केवल एक डीएल को पुन: संकलित करने की आवश्यकता होती है। अंगूठे के इस नियम का अपवाद यह है कि यदि चर अपनी निजी असेंबली के लिए निजी/संरक्षित/अनुकूल है। उन मामलों में कॉन्स का उपयोग करना सुरक्षित है।

+2

एक खतरनाक कथन है - हम किस परिवेश का तापमान ठंडा कर रहे हैं? : डी – Gusdor