2014-09-23 9 views
6

http://msdn.microsoft.com/en-US/library/0fss9skc(v=vs.120).aspx के अनुसार, गुणों को सरणी वापस नहीं करनी चाहिए। यह जेनेरिक के साथ कैसे बातचीत करता है? यदि कोई सरणी जेनेरिक के लिए स्वीकार्य प्रकार है, तो क्या मुझे T GetValue() और SetValue(T value) जैसे T Value { get; set; } के बजाय फ़ंक्शन बनाना चाहिए?सामान्य गुण हैं जो सरणी को स्वीकार्य कर सकते हैं?

+3

मूल्य प्राप्त करने/सेट करने के तरीकों का निर्माण करना वास्तव में नियम के तर्क में वर्णित प्रभावों को कम करने के लिए कुछ भी नहीं कर रहा है। – Servy

+0

इस बारे में वास्तव में कभी नहीं सोचा। जब मैं नहीं चाहता था कि मेरा आंतरिक संग्रह जोड़ा जाए या हटा दिया जाए तो मैंने हमेशा एक सरणी वापस कर दी है। शायद, मुझे ReadOnlyCollection का उपयोग शुरू करना चाहिए। – TyCobb

+0

@ सर्वी: हालांकि पर्याप्त सत्य है, अधिकांश प्रोग्रामर एक लूप में GetValueT() [x] जैसे निर्माण का उपयोग करने से पहले थोड़ा सोचते हैं। – RobinHood70

उत्तर

10

यह नियम पूर्ण नहीं है। समझें कि यह कहां से आता है: एक सरणी लौटने वाली संपत्ति को वास्तविक रूप से इसकी प्रतिलिपि बनाने की आवश्यकता होती है ताकि कॉलर अपनी प्रतिलिपि को बदल सके और ऑब्जेक्ट आंतरिक स्थिति में न पहुंच सके।

यदि आप जेनेरिक कोड से निपट रहे हैं कि जेनेरिक कोड कंक्रीट T के बारे में कुछ भी नहीं जानता है। यह इसकी आंतरिक संरचना पर निर्भर नहीं है। इसलिए, इस नियम का पालन करने में मदद नहीं मिलती है। जेनेरिक कोड में और बाहर पासिंग सरणी पूरी तरह से स्वीकार्य है।

व्यावहारिक उदाहरण: List<int[]>

इसके अलावा, सर्वी सही ढंग से नोट करती है कि मूल्य प्राप्त करने/सेट करने के तरीकों को बनाने के लिए वास्तव में नियम के तर्क में वर्णित प्रभावों को कम करने के लिए कुछ भी नहीं कर रहा है।

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