2009-11-06 22 views
6

मैं एक अंतर्निहित विशेषता की तलाश कर रहा था यह निर्दिष्ट करने के लिए कि एक प्रकार अपरिवर्तनीय है, और मुझे केवल System.ComponentModel.ImmutableObjectAttribute मिला।ImmutableObjectAttribute का उपयोग कैसे किया जाता है?

परावर्तक का उपयोग करके, मैंने जांच की कि इसका उपयोग कहाँ किया गया था, और ऐसा लगता है कि इसका उपयोग करने वाला एकमात्र सार्वजनिक वर्ग सिस्टम है। ड्रॉइंग.इमेज ... डब्ल्यूटीएफ? यह स्ट्रिंग, int या किसी भी प्रकार के आदिम प्रकारों पर इस्तेमाल किया जा सकता था, लेकिन छवि निश्चित रूप से अपरिवर्तनीय नहीं है, इसके आंतरिक स्थिति को बदलने के लिए कई तरीके हैं (उदाहरण के लिए ग्राफिक्स या बिटमैप.SetPixel विधि का उपयोग करना)।

तो बीसीएल में एकमात्र वर्ग जिसे स्पष्ट रूप से अपरिवर्तनीय घोषित किया गया है, उत्परिवर्तनीय है! या क्या मैं कुछ न कुछ भूल रहा हूं?

उत्तर

8

प्रलेखन राज्यों:

यह विशेषता आम तौर पर गुण विंडो में निर्धारित करने के लिए एक विस्तार योग्य वस्तु के रूप में केवल पढ़ने के लिए प्रस्तुत करने के लिए प्रयोग किया जाता है। इस प्रकार, यह संपत्ति केवल डिज़ाइन समय पर उपयोग की जाती है।

परावर्तक पता चलता है कि केवल विधि इस विशेषता का उपयोग आंतरिक System.Windows.Forms.PropertyGridInternal.GridEntry.Flags संपत्ति डिजाइन संपत्ति ग्रिड द्वारा प्रयोग किया जाता गेटर है।

3

मुझे लगता है कि आप ImmutableObjectAttribute उलझन के उपयोग है - इसका मतलब है कि वस्तु के गुण एक रूप डिजाइनर या इसी तरह की डिजाइन समय UI में संपादन योग्य, नहीं नहीं होना चाहिए कि वस्तु ही अपरिवर्तनीय है।

यह विशेषता शायद दैनिक WTF के लिए एक उम्मीदवार है, तथापि है ... ImmutableObjectAttribute के लिए दस्तावेज़ पर

+1

"यह नहीं कि ऑब्जेक्ट स्वयं अपरिवर्तनीय है" - दस्तावेज़ीकरण निर्दिष्ट करता है कि यह विशेषता "निर्दिष्ट करती है कि किसी ऑब्जेक्ट में संपादित होने में सक्षम कोई सबप्रोपर्टी नहीं है"। ऐसा लगता है कि आप जो कह रहे हैं वह दस्तावेज़ीकरण के साथ विरोधाभासी है। क्या आप समझाएँगे? – MasterMastic

+0

@ केन, इस विशेषता का अर्थ है कि किसी ऑब्जेक्ट संपादक * का उपयोग करते समय ऑब्जेक्ट में * संपादित * होने के लिए कोई उप-गुण नहीं है * विजुअल स्टूडियो के फॉर्म डिज़ाइनर में से एक की तरह। इस गुण के बावजूद उन गुणों को अभी भी कोड से सेट या संशोधित किया जा सकता है। वर्तमान दस्तावेज के मुताबिक, मेरा जोर है: "यह विशेषता आमतौर पर प्रॉपर्टी विंडो * में * निर्धारित करने के लिए * एक विस्तार योग्य ऑब्जेक्ट को केवल पढ़ने के लिए ही प्रस्तुत की जाती है। इस प्रकार, यह संपत्ति * केवल डिज़ाइन समय * पर उपयोग की जाती है। " –

2

देखो: "निर्दिष्ट करता है एक वस्तु नहीं subproperties संपादित किया जा रहा करने में सक्षम है ... यह विशेषता आम तौर पर प्रयोग किया जाता है प्रॉपर्टी विंडो में यह निर्धारित करने के लिए कि एक विस्तार योग्य ऑब्जेक्ट को केवल पढ़ने के लिए प्रस्तुत करना है या नहीं। इस प्रकार, यह प्रॉपर्टी केवल डिज़ाइन समय पर उपयोग की जाती है। " तो यह विशेषता वास्तव में अपरिवर्तनीयता के बारे में नहीं है: यह एक संपत्ति ग्रिड जैसे संपादक में उपप्रोपर्टीज के प्रदर्शन/संपादन क्षमता को अक्षम करने के बारे में है।

तो छवि को अप्रचलित घोषित नहीं किया जा रहा है, Int32 को mutable के रूप में नहीं घोषित किया जा रहा है। Int32 को ImmutableObjectAttribute की आवश्यकता नहीं है क्योंकि यह वैसे भी विस्तार योग्य नहीं है। छवि में यह है क्योंकि यह विस्तार योग्य होगा, लेकिन उपयोगी नहीं है। यह सिर्फ एक वास्तव में, वास्तव में भ्रामक नाम है।

संबंधित मुद्दे