मैं विशेष रूप से सामान्य वर्ग HashSet<T>
के बारे में सोच रहा हूं। यह कई इंटरफेस लागू करता है, लेकिन कोई भी सेट के सही अर्थशास्त्र का खुलासा नहीं करता है। विशेष रूप से, विधि bool
लौटने की विधि का समर्थन नहीं करता है। (ICollection<T>
void Add
का समर्थन करता है, जिसका उपयोग चुटकी में किया जा सकता है।) इन इंटरफेस द्वारा असमर्थित यूनियनों और चौराहे जैसे सामान्य सेट ऑपरेशंस भी हैं। (हालांकि यह कहा जाना चाहिए कि इनमें से कुछ ऑपरेशन एक्सटेंशन के माध्यम से IEnumerable<T>
पर उपलब्ध हैं।).NET ढांचे में "सेट" इंटरफ़ेस क्यों नहीं है?
इसका मतलब है कि कक्षा को केवल इसके प्रत्यक्ष कार्यान्वयन के साथ सेट की तरह ही उपयोग किया जा सकता है। यानी, आप ऐसा कुछ नहीं कर सकते:
ISet<int> = new HashSet<int>;
जहां तक मुझे पता है, वैसे भी। तो क्या इसे छोड़ने के लिए पसंद को प्रेरित किया?
शायद सबसे महत्वपूर्ण बात ये है: भले ही आप HashSet<T>
से ICollection<T>
एट अल कास्ट कर सकें, आप जिस एपीआई को उजागर कर रहे हैं उसमें आप अर्थपूर्ण मूल्य खो देते हैं। यही है, आपके एपीआई के उपभोक्ताओं को कोई संकेत नहीं है कि वे एक सेट के साथ काम कर रहे हैं। तो जब आप ICollection<T>.Add
पर कॉल कर सकते हैं और प्राप्त कर सकते हैं, तो वे भ्रमित हो जाएंगे यदि वे दो बार आइटम जोड़ने का प्रयास करते हैं और यह काम नहीं करता है। एक सेट इंटरफ़ेस लोगों को सही उम्मीदों को देगा।
'आईसेट' क्या होगा 'आईसीओलेक्शन ' के पास नहीं है? –
ओह मुझे लगता है कि मैं देखता हूं ... एक 'जोड़ें' विधि जो 'बूल' देता है, आह? –
@dan - आप एक सेट में डुप्लिकेट नहीं जोड़ सकते हैं। – UpTheCreek