Usually it's best to expose the least powerful interface that the user can still meaningfully work with. If the user just needs some enumerable data, return IEnumerable
. If that's not enough because the user needs to be able to modify the list (attention! shouldn't often be the case), return an IList
.
/ संपादित करें:
जोएल अपनी टिप्पणी में एक वैध सवाल पूछता है: उपयोगकर्ता को अधिकतम शक्ति प्रदान करने के बजाय वास्तव में कम से कम शक्तिशाली इंटरफ़ेस का खुलासा क्यों करें? (दूसरे शब्दों में बयान)
इसके पीछे विचार यह है कि डेटा को वापस करने की विधि उपयोगकर्ता को इसकी सामग्री को संशोधित करने की अपेक्षा नहीं कर सकती है: क्लास की एक अन्य विधि अभी भी सूची के संदर्भ के बाद सूची को खाली होने की उम्मीद कर सकती है। कल्पना करें कि उपयोगकर्ता सूची से सभी डेटा हटा देता है। दूसरी विधि को अब एक अतिरिक्त जांच करनी है कि ग्यारह अनावश्यक हो सकता है।
सबसे महत्वपूर्ण बात यह है कि यह रिटर्न प्रकार के माध्यम से आंतरिक कार्यान्वयन के कुछ हिस्सों को उजागर करता है। अगर मुझे भविष्य में कार्यान्वयन को बदलने की जरूरत है ताकि यह अब IList
कंटेनर का उपयोग न करे, मुझे कोई समस्या है: मुझे या तो बिल्डिंग ब्रेकिंग चेंज पेश करने के लिए विधि अनुबंध को बदलने की जरूरत है। या मुझे डेटा को एक सूची कंटेनर में कॉपी करने की आवश्यकता है।
उदाहरण के तौर पर, कल्पना करें कि एक कुशल कार्यान्वयन एक शब्दकोश का उपयोग करता है और केवल मान
संग्रह देता है जो IList
को लागू नहीं करता है।