2010-05-18 11 views
8

मैं एक कक्षा बना रहा हूं जो एक निजी सदस्य के रूप में एक शब्दकोश को पॉप्युलेट करता है। मैं शब्दकोश को स्वयं को उजागर किए बिना शब्दकोश के मूल्यों का खुलासा करना चाहता हूं (केवल पढ़ने के लिए फैशन में।) मैं आसानी से _dictionary.Keys का पर्दाफाश करने के लिए एक संपत्ति बना सकता हूं, लेकिन मैं [] को कैसे अधिभारित कर सकता हूं ताकि MyClass[key]_dictionary[key] लौटा सके?मैं [] ऑपरेटरों को कैसे अधिभारित कर सकता हूं?

मुझे लगता है मैं एक इंटरफ़ेस को लागू करने की आवश्यकता हो सकती लगता है, लेकिन मुझे यकीन है कि जो एक ...

उत्तर

23

मैं बहुत यकीन है कि यह है कि तुम क्या कर रहे हैं रहा हूँ नहीं कर रहा हूँ के बाद:

public TValue this[TKey key] { 
    get { return _dictionary[key]; } 
} 

हैं आप ग्राहक कोड को इंगित करने के लिए एक इंटरफ़ेस को कार्यान्वित करना चाहते हैं कि आपकी कक्षा को TKey के सूचकांक द्वारा एक्सेस किया जा सकता है, निकटतम मिलान (जिसे मैं जानता हूं) IDictionary<TKey, TValue> है।

दुर्भाग्य से, IDictionary<TKey, TValue> जिसका मतलब है कि आप केवल एक NotImplementedException फेंक (या somesuch) करने के लिए स्पष्ट रूप से सदस्यों के बहुत सारे को लागू करने के लिए होगा एक पूरे के सदस्यों को बताया कि अपने केवल पढ़ने के लिए आवश्यकता का उल्लंघन का गुच्छा, जब वे कहा जाता है है: अर्थात्, this, Add, Clear, और Remove के लिए सेटटर।

शायद एक अलग इंटरफ़ेस है जो इस उद्देश्य के लिए अधिक उपयुक्त होगा (IReadOnlyDictionary<TKey, TValue> जैसे कुछ?); मैं बस इसे पार नहीं किया है।

आप अपने अपने इंटरफ़ेस भी लिख सकते हैं, बेशक, यदि आप कई वर्गों का इरादा रखते हैं जो इस तरह की कार्यक्षमता प्रदान करते हैं।

+0

धन्यवाद! '[]' के लिए खोजना मुश्किल है। मुझे अपना इंटरफ़ेस लिखने के लिए अब तक जाने की आवश्यकता नहीं है, लेकिन उस टिप के लिए भी धन्यवाद। बस आपके द्वारा दिया गया कोड वह सब कुछ था जिसे मुझे अभी चाहिए। – dlras2

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

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