2011-02-07 18 views
11

संभव डुप्लिकेट:
C# - List<T> or IList<T>यह बेहतर क्यों है (वापसी सूची के बजाय वापसी IList)?

जब मैं अपने विधि से एक सूची प्रदान मैं 2 तरह से कर सकते हैं। एक सूची

Private List<datatype> MethodName() 
{ 
    Return List 
} 

के रूप में एक IList

Private IList<datatype> MethodName() 
{ 
    Return IList 
} 

के रूप में जैसा कि मैंने सुना है कि हम एक IList के रूप में यह वापस आ जाएगी। क्या कोई यह बता सकता है कि वह कौन है?

उत्तर

2

यह इंटरफ़ेस को कार्यान्वयन से अलग करता है। कॉलर के लिए यह महत्वपूर्ण नहीं है कि आप परिणाम ऑब्जेक्ट को कैसे कार्यान्वित करते हैं, इसलिए इंटरफेस का उपयोग युग्मन को कम करता है। यदि आप IList वापस लौटते हैं, तो आप कॉलर के कोड को तोड़ने के बिना किसी भी समय एक अलग कार्यान्वयन पर स्विच कर सकते हैं।

4

आप एक पुस्तकालय है कि दूसरों का उपयोग करेगा, आप आम तौर पर ठोस कार्यान्वयन के बजाय इंटरफेस के माध्यम से इसे बेनकाब करने के लिए चाहते हैं के माध्यम से अपने वर्ग को उजागर कर रहे हैं। यदि आप एक अलग कंक्रीट कक्षा का उपयोग करने के लिए बाद में अपनी कक्षा के कार्यान्वयन को बदलने का निर्णय लेते हैं, तो इससे मदद मिलेगी। उस स्थिति में इंटरफ़ेस में परिवर्तन नहीं होने के कारण आपकी लाइब्रेरी के उपयोगकर्ताओं को उनके कोड को अपडेट करने की आवश्यकता नहीं होगी।

यदि आप इसे आंतरिक रूप से उपयोग कर रहे हैं, तो आप बहुत अधिक परवाह नहीं कर सकते हैं, और सूची का उपयोग कर ठीक हो सकता है।

इस सवाल का समाधान पढ़ें: Why is it considered bad to expose List<T>?

+0

कभी-कभी आप प्रशासन में पुराने उत्तर तक पहुंच जाते हैं ... – Scoregraphic

-2

यदि आप के रूप में सिर्फ सूची वापस जाएँ। तो आपके फ़ंक्शन के कॉलर को क्लास सूची के उदाहरण में वापसी करना होगा।

जब आप एक आईएलआईस्ट वापस करते हैं तो कॉलर इसे उस इंटरफ़ेस को लागू करने वाले किसी भी चीज़ के उदाहरण में डाल सकता है। मान लीजिए कि कॉलर ने एक कार्यान्वयन किया है जो किसी प्रकार की फंकी सॉर्टिंग का समर्थन करता है, या हो सकता है कि उन्होंने एक कार्यान्वयन किया हो जो सीधे डेटाबेस तालिका में सूची को मानचित्र करता है।

यह रिसीवर को सूचियों को लागू करने की स्वतंत्रता के बारे में है।

+1

बस गलत है। यदि आप सूची लौटाते हैं तो रिसीवर को इसे सूची या सूची के रूप में स्वीकार करने की स्वतंत्रता होती है। यदि आप आईएलिस्ट लौटते हैं कि आजादी खत्म हो गई है। – Foxfire

1

आप IList वापस नहीं कर सकते - आपको उस इंटरफेस के कार्यान्वयन को वापस करने की आवश्यकता है (यानी List)। निश्चित रूप से 'सूची' लौटने से IList लौटने की आपकी विधि घोषणा को पूरा किया जाएगा क्योंकि ListIList लागू करता है।

आम तौर पर सबसे अच्छा अभ्यास सबसे सामान्य प्रकार के मापदंडों को स्वीकार करने और सबसे विशिष्ट वापस जाने के लिए है। हालांकि, पारंपरिक प्रोग्रामर खुद को List कार्यान्वयन से जोड़ना नहीं चाहते हैं और आमतौर पर IList इंटरफ़ेस लौटाते हैं। यदि आप कॉलर्स को सरणी को संशोधित नहीं करना चाहते हैं तो आप IEnumerable लौट सकते हैं (IList पर .AsReadOnly() एक्सटेंशन विधि को कॉल करें)।

0

इंटरफ़ेस लौटने से आप बाद में अपना कार्यान्वयन बदल सकते हैं और इस प्रकार युग्मन को कम कर देता है।

हालांकि किसी ऑब्जेक्ट को वापस करने पर यह आमतौर पर कम व्यावहारिक चिंता का विषय होता है। वस्तुओं को स्वीकार करते समय यह अधिक प्रासंगिक है (उदा। फ़ंक्शन पैरामीटर के रूप में)।

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