Design Guidelines for Developing Class Libraries में, माइक्रोसॉफ्ट का कहना है:माइक्रोसॉफ्ट म्यूटेबल मूल्यों के साथ पठनीय क्षेत्रों के खिलाफ क्यों सलाह देता है?
Do not assign instances of mutable types to read-only fields.
The objects created using a mutable type can be modified after they are created. For example, arrays and most collections are mutable types while Int32, Uri, and String are immutable types. For fields that hold a mutable reference type, the read-only modifier prevents the field value from being overwritten but does not protect the mutable type from modification.
यह केवल समझा क्यों यह केवल पढ़ने के लिए उपयोग करने के लिए बुरा है बिना केवल पढ़ने के व्यवहार restates। निहितार्थ यह प्रतीत होता है कि बहुत से लोग समझ में नहीं आता कि "केवल पढ़ने" क्या करता है और गलत तरीके से केवल पढ़ने वाले क्षेत्रों को गहराई से अपरिवर्तनीय होने की उम्मीद करेगा। असल में यह "पाठक" का उपयोग करने के लिए गहरी अपरिवर्तनीयता को इंगित करने वाले कोड दस्तावेज के रूप में उपयोग करने की सलाह देता है - इस तथ्य के बावजूद कि कंपाइलर को इसे लागू करने का कोई तरीका नहीं है - और इसके सामान्य कार्य के लिए इसका उपयोग अस्वीकार करता है: यह सुनिश्चित करने के लिए कि फ़ील्ड का मान बदल नहीं जाता है वस्तु का निर्माण किया गया है।
मैं उपयोग करने के लिए "केवल पढ़ने के लिए" अपनी सामान्य संकलक द्वारा समझे गए अर्थ के अलावा कुछ इंगित करने के लिए इस सिफारिश के साथ असहज महसूस। मुझे लगता है कि यह लोगों को "पठनीय" के अर्थ को गलत समझने के लिए प्रोत्साहित करता है, और इसके अलावा यह उम्मीद करने के लिए कि कोड के लेखक का इरादा नहीं हो सकता है। मुझे लगता है कि यह उन जगहों पर इसका उपयोग रोकता है जो उपयोगी हो सकते हैं - उदा। यह दिखाने के लिए कि दो म्यूटेबल ऑब्जेक्ट्स के बीच कुछ रिश्ते उन वस्तुओं में से एक के जीवनकाल के लिए अपरिवर्तित बनी हुई है। यह मानने की धारणा है कि पाठकों को "पठनीय" के अर्थ को समझ में नहीं आता है, यह भी माइक्रोसॉफ्ट की अन्य सलाह के विपरीत है, जैसे कि FxCop के "Do not initialize unnecessarily" नियम, जो आपके कोड के पाठकों को भाषा में विशेषज्ञ मानते हैं और उन्हें पता होना चाहिए (उदाहरण के लिए) बूल फ़ील्ड्स को स्वचालित रूप से झूठी शुरू कर दिया जाता है, और आपको अनावश्यकता प्रदान करने से रोकता है जो दिखाता है "हां, यह जानबूझकर झूठ पर सेट हो गया है; मैं इसे शुरू करना न भूल गया"।
तो, पहली और महत्वपूर्ण बात, क्यों माइक्रोसॉफ्ट परिवर्तनशील प्रकार के लिए संदर्भ के लिए केवल पढ़ने के उपयोग की सलाह नहीं देते हैं? मुझे यह भी जानने में दिलचस्पी होगी:
- क्या आप अपने सभी कोड में इस डिज़ाइन दिशानिर्देश का पालन करते हैं?
- जब आप कोड लिखने वाले कोड में "readonly" देखते हैं तो आप क्या उम्मीद करते हैं?
100% सहमत हैं। विशिष्ट माइक्रोसॉफ्ट दिशानिर्देश। \ * फ्लश \ * –
मैं यह नहीं कह सकता कि मैं पूर्वाग्रह से मुक्त हूं। ;) मुझे लगा कि एंथनी का जवाब, सटीक होने पर, कुछ भी नहीं कहा गया था जो दिशानिर्देश में पहले से ही नहीं बताया गया था: म्यूटेबल ऑब्जेक्ट्स के रीडोनली संदर्भ खराब हैं ... क्योंकि वस्तु उत्परिवर्तनीय है। दूसरी तरफ, आपके उत्तर ने कम से कम विस्तृत किया कि आप म्यूटेबल ऑब्जेक्ट्स के रीडोनली संदर्भ क्यों लेना चाहते हैं। अब जब मैं इसे देखता हूं, शायद स्टैक्स का जवाब है - सख्ती से बोलना - मूल रूप से पूछे गए प्रश्न का सबसे सटीक उत्तर। – Weeble