मैं एक सरणी रैपर क्लास लिख रहा हूं जो IList<T>
लागू करता है। मुझे यकीन है कि IList<T>.IsReadOnly
(ICollection<T>
से विरासत में मिला) के लिए वापस लौटना है।आईसीलेक्शन <T> का अनुबंध IsReadOnly
मेरी कक्षा सम्मिलन और निष्कासन को अस्वीकार करती है। यह this[int].set
संपत्ति के माध्यम से आइटम को संशोधित करने की अनुमति देता है।
MSDN कहा गया है कि
एक संग्रह है कि केवल पढ़ने के लिए इसके अलावा, हटाने, या तत्वों के संशोधन की अनुमति नहीं है के बाद संग्रह बनाई गई है। जहाँ तक मैं देख सकते हैं, इस विधि का उपयोग किया जाता है के रूप में इस प्रकार है:
मेरी कक्षा के लिए, यह मतलब है मैं true
वापस जाने के लिए है, लेकिन मेरी आँखों में इस संपत्ति के एक बिट पूरी तरह से बेकार बना देता है कि लगता है :
ग्राहक मनमाने ढंग से IList
को संभालते हैं और पर किसी तत्व को सम्मिलित करने की आवश्यकता है, यदि संभव हो तो। वे इसे Insert
पर कॉल करके और परिणामी NotSupportedException
को पकड़कर कर सकते हैं - और विभिन्न कारणों से, यह वांछनीय नहीं हो सकता है। तो अपवाद को उत्तेजित करने के बजाय, ग्राहक पहले से ही IsReadOnly
संपत्ति का परीक्षण कर सकते हैं।
लेकिन क्योंकि यह उसकी सामग्री की परिवर्तनीयता के साथ संग्रह की परिवर्तनीयता घुलमिल इस संपत्ति का परिणाम गलत होगा - जो पूरी तरह से असंबंधित मामलों कर रहे हैं!
यह सुनिश्चित हो, वहाँ IList.IsFixedSize
संपत्ति (विस्तार नहीं IList<T>
करता IList
) है, लेकिन यह एक अलग प्रकार है। मुझे क्या करना चाहिए? IList
भी लागू करें (मैं वास्तव में इस विकल्प की तरह नहीं है)? कुछ और करो?
केवल कुछ जोड़ने के लिए, ReadOnlyCollection सामग्री को संशोधित किया जा सकता है (यदि म्यूटेबल हो) और फिर भी, "IsReadOnly" संपत्ति सत्य लौटती है ... –
@bruno - यह निर्भर करता है कि "संपादन सामग्री" का मतलब है कि आप बदल रहे हैं ** बदलना ** किसी दिए गए स्थान पर आइटम (सूची [एन] = आइटम), और ** किसी दिए गए स्थान पर आइटम को म्यूटेट करना (सूची [एन] .SomeProp = मान)। –