2009-04-09 14 views

उत्तर

13

जब आप मूल रूप से Equals ओवरराइड करते हैं। जब आप सरल संदर्भ समानता की तुलना में समानता का एक अलग विचार प्रदान करना चाहते हैं।

स्ट्रिंग इसका एक अच्छा उदाहरण है - दो तार समान हैं (साधारण समान कॉल के तहत) यदि वे वर्णों के समान अनुक्रम का प्रतिनिधित्व करते हैं। हैश कोड इस पर प्रतिबिंबित करता है, जैसे कि यदि दो तार बराबर हैं तो उनके पास एक ही हैश कोड होगा। (रिवर्स जरूरी सच नहीं है -। दो असमान तार एक ही हैश कोड हो सकता है, लेकिन यह संभावना नहीं है)

(स्ट्रिंग्स अन्य तरीकों से मुश्किल कर रहे हैं, ध्यान रखें कि आप - वहाँ समानता के विभिन्न विचारों के बहुत सारे हैं आधारित संस्कृति और आवरण पर है, लेकिन String.Equals बस जो स्ट्रिंग बनाने UTF-16 कोड अंक पर लग रहा है, और उन्हें सरल बोधगम्य फैशन में है।)

+0

मेरा सहकर्मी और मैं आज इस पर चर्चा कर रहा था। अब और अधिक समझ में आता है। धन्यवाद जॉन – RSolberg

+2

जॉन के लिए धन्यवाद विवरण समझें। – tush1r

+0

मान लें कि मेरे पास एक बिंदु है जिसमें निर्देशांक का वर्णन करने के लिए दो पूर्णांक हैं। मैं _unique_ हैशकोड कैसे वापस करूँगा ई जो केवल एक पूर्णांक बड़ा है? मेरी संरचना जितनी अधिक डेटा है, उतना ही उच्च डेटा को पूरी तरह से अलग डेटा के लिए प्राप्त करने का मौका है - क्या यह मेरे कार्यान्वयन (जिसमें समानता संचालन है) में 7 फ्लोट्स हैं, तो इसे लागू करने के लिए बेकार होगा? –

3

आप Equals ओवरराइड यदि आप के रूप में अच्छी GetHashCode ओवरराइड चाहिए।

1

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

हैशटेबल ऑब्जेक्ट में कुंजी के रूप में उपयोग किए जाने वाले ऑब्जेक्ट्स को GetHashCode विधि को ओवरराइड करना चाहिए क्योंकि उन ऑब्जेक्ट्स को अपना हैश कोड बनाना होगा। यदि कुंजी के रूप में उपयोग की जाने वाली वस्तु गेटहाशकोड का उपयोगी कार्यान्वयन प्रदान नहीं करती है, तो हैशटेबल ऑब्जेक्ट का निर्माण होने पर आप हैश कोड प्रदाता निर्दिष्ट कर सकते हैं। .NET Framework संस्करण 2.0 से पहले, हैश कोड प्रदाता सिस्टम पर आधारित था। चयन .. ::। IHashC odeProvider इंटरफ़ेस। संस्करण 2.0 के साथ शुरू, हैश कोड प्रदाता System.Collections .. ::। IEqualityComparer इंटरफेस पर आधारित है। "

http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx

4

अपने प्रकार मान अर्थ विज्ञान (की तुलना सामग्री) संदर्भ अर्थ विज्ञान के बजाय (का पालन करना चाहिए, तो ऑब्जेक्ट पहचान की तुलना करना), आपको उदाहरण ऑब्जेक्ट की अपनी ओवरराइड लिखनी चाहिए। एक्वाल्स()

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