2012-04-18 6 views
9

में केवल दो-आयामी सरणी पढ़ें सी # में केवल पढ़ने-योग्य 2-डी सरणी को वापस करने का कोई स्थापित तरीका है?सी #

मुझे पता है ReadOnlyCollection 1-डी सरणी के लिए उपयोग करने के लिए सही बात है, और this[] {get} लागू करने वाली अपनी खुद की रैपर कक्षा लिखने में मुझे खुशी है। लेकिन अगर यह पहिया पहले से मौजूद है तो मैं पहिया को फिर से शुरू नहीं करना चाहता हूं।

+2

बहुआयामी सरणी afaik – BrokenGlass

+0

के लिए कुछ भी नहीं बनाया गया है यहां स्टैक ओवरफ्लो पर एक समान प्रश्न से कुछ उत्तर दिए गए हैं - http://stackoverflow.com/questions/678379/is-there-a-read-only-generic-dictionary- उपलब्ध -इन-नेट –

+0

यह बहुत समान नहीं है, @ वृश्चिक-राजकुमार। –

उत्तर

1

इसका अनुकरण करने का केवल एक ही तरीका है।

आपको एक निजी सरणी के साथ अपनी कक्षा बनाने की जरूरत है।

'10 .8 'क्लिक एक bidimensional सरणी के अनुकरण पता चलता है:

एक सरणी के सबसे समान कार्यान्वयन एक इंडेक्सर है।

यदि आप केवल गेटर के साथ इंडेक्सर को लागू करते हैं, तो उपयोगकर्ता केवल तत्वों को पढ़ सकता है, लेकिन उन्हें नहीं लिख सकता है। हालांकि, यदि प्रत्येक तत्व एक ऑब्जेक्ट (संदर्भ प्रकार) है तो आप एक्सेस किए गए ऑब्जेक्ट गुणों के संशोधन को रोक नहीं सकते हैं।

हालांकि

, वहाँ का अनुकरण "रीड-ओनली" वस्तुओं के कई तरीके हैं:

  • , एक आवरण वर्ग कि केवल पढ़ने के लिए गुण के रूप में सरणी में प्रत्येक तत्व के गुणों को उजागर करता है बनाएं ताकि वे बदला नहीं जा सकता
  • का उपयोग करना आदिम मूल्य प्रकार (जैसे int)
  • निजी सरणी में मूल तत्व के बजाय निजी सरणी में तत्व की एक प्रति वापस लौट कर परिवर्तन को परास्त, ताकि, वस्तु में किए गए परिवर्तनों नहीं है सरणी में मूल वस्तु को प्रभावित करें।

सी ++ जैसी अन्य भाषाओं में निरंतर मानों के संदर्भ और पॉइंटर्स हैं, लेकिन यह सी # में मौजूद नहीं है।

3

दुर्भाग्य से आपके द्वारा पूछे जाने वाले मामले को संभालने के लिए कोई अंतर्निहित कार्यान्वयन नहीं है। लेकिन अपने आप पर एक सरल कार्यान्वयन, कुछ मुश्किल नहीं होना चाहिए।

केवल लगता है, मैं तुम्हें इसके बारे में पता आशा है, कि आप क्या करेंगे एक केवल पढ़ने के लिए संग्रह, लेकिन कि संग्रह के अंदर नहीं तत्वों है।

उम्मीद है कि इससे मदद मिलती है।