2010-11-08 9 views
6

ReadOnlyCollection<T>ICollection<T> इंटरफ़ेस को समझता है जिसमें विधियां और निकालें जैसी विधियां हैं। मुझे पता है कि विशेषताओं का उपयोग करके इंटेलिसेंस से विधियों को कैसे छिपाना है, लेकिन यदि मैं इन विधियों का उपयोग करने का प्रयास करता हूं तो वास्तविक संकलन त्रुटि का कारण बनना संभव कैसे है?ReadOnlyCollection छुपाएं विधियों को जोड़ें और निकालें

(बीटीडब्ल्यू, मुझे पता है कि आरओसी पर जोड़ें और निकालने के लिए यह समझ में नहीं आता है, यह सही डेटा संरचना का उपयोग करने पर विरासत वाले memebers के लिए संकलन त्रुटि उत्पन्न करने का सवाल है)।

उत्तर

16

वे explicit interface implementation के साथ लागू कर रहे हैं, इस तरह:

void ICollection<T>.Add(T item) { 
    throw NotSupportedException(); 
} 

पद्धति अभी भी प्रतिदेय है, लेकिन केवल यदि आप एक ICollection<T> के रूप में वस्तु को देखना। उदाहरण के लिए:

ReadOnlyCollection<int> roc = new ReadOnlyCollection<int>(new[] { 1, 2, 3 }); 
// Invalid 
// roc.Add(10); 

ICollection<int> collection = roc; 
collection.Add(10); // Valid at compile time, but will throw an exception 
2

दरअसल, ICollection<T> इंटरफ़ेस स्पष्ट रूप से उन तरीकों को लागू करने से, आप उन्हें सीधे फोन नहीं कर सकते हैं।
आपको ऑब्जेक्ट (ReadOnlyCollection इंस्टेंस) को ICollection<T> पर स्पष्ट रूप से डालना होगा। फिर, आप ऐड विधि को कॉल कर सकते हैं। (इसलिए, संकलक शिकायत नहीं करेगा, हालांकि आपको रनटाइम अपवाद मिलेगा)।

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