2009-01-04 27 views
12

यदि मेरे पास एक जटिल वस्तु है, तो 2 उदाहरणों की तुलना करने के लिए कोड लिखने के लिए सबसे अच्छा अभ्यास पैटर्न क्या है, यह देखने के लिए कि वेदो वस्तुओं की तुलना।

उत्तर

15

IEquatable इंटरफ़ेस को कार्यान्वित करते हैं। यह एक सामान्यीकृत विधि को परिभाषित करता है कि उदाहरणों की समानता निर्धारित करने के लिए एक प्रकार-विशिष्ट विधि बनाने के लिए मान प्रकार या वर्ग लागू होता है। बराबर (ऑब्जेक्ट) को ओवरराइड करना न भूलें। अधिक यहाँ जानकारी:

http://msdn.microsoft.com/en-us/library/ms131187.aspx

+0

आईसीओपरपेबल – leora

+0

से यह अलग कैसे है Iquatable केवल आपको बताएगा कि वे समान हैं या नहीं। IComparable आपको एक सापेक्ष आदेश देगा। ऑब्जेक्ट्स के लिए जिन्हें ऑर्डर नहीं किया गया है, लेकिन वे समतुल्य हैं (छवियों, उदाहरण के लिए) आप IComparable का उपयोग नहीं कर सकते हैं। – tvanfosson

+0

है .quals() == ?? – leora

2

मुझे लगता है कि इस सवाल का जवाब अत्यधिक समस्या निर्भर है। उदाहरण के लिए, आप वस्तुओं को केवल तभी मानना ​​चाहेंगे जब उनकी सभी संपत्ति समकक्ष हों। यह शायद वह मामला होगा जहां प्रत्येक ऑब्जेक्ट में विशिष्ट पहचान संपत्ति नहीं होती है। यदि ऐसी कोई संपत्ति (या गुण) है, तो एक आईडी या आईडी और संस्करण कहें, जो विशिष्ट रूप से प्रकार के प्रत्येक ऑब्जेक्ट को पहचानता है, तो आप केवल उस संपत्ति (या गुणों) के आधार पर तुलना करना चाहेंगे।

आधार पैटर्न, हालांकि, होना चाहिए की तरह कुछ:

if their references are equal (includes both null) 
    return true 
else if one object is null 
    return false 
else 
    return value based on relevant properties 

ध्यान दें कि अगर आप को ओवरराइड ऑपरेटर के बराबर है, तो आप भी GetHashCode() इतना है कि बराबर वस्तुओं के लिए हैश कोड ओवरराइड करने के लिए चाहता हूँ समान हैं। यह सुनिश्चित करेगा कि ऑब्जेक्ट कुंजी के रूप में उपयोग किए जाने पर डुप्लिकेट कुंजियों को निर्धारित करने के लिए हैश कोड का उपयोग करने वाले डेटा स्ट्रक्चर ठीक से काम करते हैं।

0

चूंकि आपने कॉम्प्लेक्स ऑब्जेक्ट का उल्लेख किया है, तो सुनिश्चित करें कि कॉम्प्लेक्स ऑब्जेक्ट कार्यान्वयन में सभी समग्र ऑब्जेक्ट्स (ऑब्जेक्ट) जैसा कि tvanfosson द्वारा उल्लिखित है। आखिरकार कॉम्प्लेक्स ऑब्जेक्ट में समेकित सभी समग्र ऑब्जेक्ट्स के बराबर लाभ

+0

को ओवरराइड या ओवरराइड नहीं करते ? –

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