2010-08-03 8 views
12

मैंने "सामान्य व्यवहार और कोड सुधार" के तहत रिशेर्पर सुझाव देखा है: स्थानीय चर या फ़ील्ड को लगातार में कनवर्ट करें।रीशेर्पर रीडोनली पर क्यों रोकता है?

मैं यह भी देखा है विधेयक वैगनर के पुस्तक "Effective C#: 50 Specific Ways to Improve Your C#" वहाँ एक भाषा के मुहावरे "केवल पढ़ने के लिए पसंद करते हैं const को" जिसमें लेखक consts का उपयोग करने का जोखिम की व्याख्या है।

मेरा प्रश्न केवल पढ़ने और कॉन्स्ट के बीच मतभेदों के बारे में नहीं है और उनका उपयोग कब किया जाता है, लेकिन एक स्रोत को एक सामान्य अभ्यास/कोड सुधार के रूप में क्यों रखा जाता है और दूसरी तरफ दूसरा एक मूर्खता के रूप में पढ़ता है?

+4

ध्यान से पढ़ें: "मेरा प्रश्न केवल पढ़ने और कॉन्स्ट के बीच मतभेदों के बारे में नहीं है और उनका उपयोग कब करें" ... –

उत्तर

9

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

+1

यह मुख्य बिंदु है। निजी स्थिरांक के साथ कोई रखरखाव चिंता नहीं है, क्योंकि उन्हें सीधे बाहरी असेंबली में बेक नहीं किया जा सकता है। –

2

रिशेर्पर के साथ अपने अनुभव में, यदि आप घोषणा में एक चर मूल्य निर्धारित कर रहे हैं, तो आपको यह सुझाव मिलेगा, लेकिन परिवर्तनीय का मूल्य कभी भी विधि में नहीं बदलता है। उस स्थिति में, इसे स्थानीय स्थिरता में बनाया जा सकता है। आपको एक इंस्टेंस वैरिएबल पर चेतावनी भी मिल जाएगी जिसे आप जगह में शुरू करते हैं, लेकिन क्लास बॉडी में कहीं भी मूल्य को कभी नहीं बदलते हैं।

और उस पुस्तक के लेखक मूल रूप से तर्क देते हैं कि readonly का उपयोग करके, आप निर्भर विधानसभाओं को पुनर्निर्माण करने से बच सकते हैं यदि आप readonly मान का मान बदलते हैं। इसके विपरीत, const में परिवर्तन के लिए, आपको const के साथ असेंबली के नए संस्करण के विरुद्ध निर्भर असेंबली को दोबारा जोड़ना होगा।

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

मुझे लगता है कि कोड स्पष्टता के लिए यह बेहतर है कि const थोड़ा अधिक संकलन रखरखाव के संभावित खर्च पर प्रदान करता है।

+0

यह मुझे केवल पढ़ने के क्षेत्र को शुरू करने पर भी पूछता है। –

+0

हां, यदि रीडोनली फ़ील्ड को आवृत्ति चर के रूप में घोषित किया गया है और आप कोड में कहीं भी इसका मान नहीं बदलते हैं, तो आपको वह चेतावनी मिल जाएगी। और मैं अपने संपादन में उल्लिखित कारणों के लिए बिल वैग्नर के बजाय यहां रिशेर्पर से सहमत हूं। लेकिन वैग्नर अच्छे अंक बनाता है, यह सिर्फ राय का विषय है। – dcp