जब हमने 'सिस्टम' नाम स्थान में 'वस्तु' वर्ग द्वारा प्रदान की GetHashCode() विधि ओवरराइड करना चाहिए?GetHashCode() को ओवरराइड करने के लिए कब?
उत्तर
जब आप मूल रूप से Equals
ओवरराइड करते हैं। जब आप सरल संदर्भ समानता की तुलना में समानता का एक अलग विचार प्रदान करना चाहते हैं।
स्ट्रिंग इसका एक अच्छा उदाहरण है - दो तार समान हैं (साधारण समान कॉल के तहत) यदि वे वर्णों के समान अनुक्रम का प्रतिनिधित्व करते हैं। हैश कोड इस पर प्रतिबिंबित करता है, जैसे कि यदि दो तार बराबर हैं तो उनके पास एक ही हैश कोड होगा। (रिवर्स जरूरी सच नहीं है -। दो असमान तार एक ही हैश कोड हो सकता है, लेकिन यह संभावना नहीं है)
(स्ट्रिंग्स अन्य तरीकों से मुश्किल कर रहे हैं, ध्यान रखें कि आप - वहाँ समानता के विभिन्न विचारों के बहुत सारे हैं आधारित संस्कृति और आवरण पर है, लेकिन String.Equals
बस जो स्ट्रिंग बनाने UTF-16 कोड अंक पर लग रहा है, और उन्हें सरल बोधगम्य फैशन में है।)
आप Equals
ओवरराइड यदि आप के रूप में अच्छी GetHashCode
ओवरराइड चाहिए।
"गेटहाशकोड विधि को व्युत्पन्न प्रकार से ओवरराइड किया जा सकता है। वैल्यू प्रकारों को उस विधि के लिए उपयुक्त हैश फ़ंक्शन प्रदान करने के लिए इस विधि को ओवरराइड करना होगा और हैश तालिका में उपयोगी वितरण प्रदान करना होगा। सर्वोत्तम परिणामों के लिए, हैश कोड एक स्थिर क्षेत्र या संपत्ति के बजाय किसी उदाहरण फ़ील्ड या प्रॉपर्टी के मान पर आधारित होना चाहिए।
हैशटेबल ऑब्जेक्ट में कुंजी के रूप में उपयोग किए जाने वाले ऑब्जेक्ट्स को GetHashCode विधि को ओवरराइड करना चाहिए क्योंकि उन ऑब्जेक्ट्स को अपना हैश कोड बनाना होगा। यदि कुंजी के रूप में उपयोग की जाने वाली वस्तु गेटहाशकोड का उपयोगी कार्यान्वयन प्रदान नहीं करती है, तो हैशटेबल ऑब्जेक्ट का निर्माण होने पर आप हैश कोड प्रदाता निर्दिष्ट कर सकते हैं। .NET Framework संस्करण 2.0 से पहले, हैश कोड प्रदाता सिस्टम पर आधारित था। चयन .. ::। IHashC odeProvider इंटरफ़ेस। संस्करण 2.0 के साथ शुरू, हैश कोड प्रदाता System.Collections .. ::। IEqualityComparer इंटरफेस पर आधारित है। "
http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx
अपने प्रकार मान अर्थ विज्ञान (की तुलना सामग्री) संदर्भ अर्थ विज्ञान के बजाय (का पालन करना चाहिए, तो ऑब्जेक्ट पहचान की तुलना करना), आपको उदाहरण ऑब्जेक्ट की अपनी ओवरराइड लिखनी चाहिए। एक्वाल्स()
- 1. हम एक शब्दकोश के लिए GetHashCode() कब करते हैं?
- 2. ऑनरर ओवरराइड कब करें?
- 3. सी # GetHashCode/
- 4. super.onPause() को कॉल करने के लिए कब?
- 5. GetHashCode को सही ढंग से कार्यान्वित करना
- 6. स्ट्रिंग कुंजियों के साथ GetHashCode()
- 7. ReSharper GetHashCode ओवरराइड के लिए '397' का उपयोग क्यों किया जाता है?
- 8. सी # GetHashCode विधि
- 9. बराबर() और GetHashCode()
- 10. कार्यान्वयन GetHashCode
- 11. जब के बजाय ओवरराइड सी # नई उपयोग करने के लिए
- 12. डेटाबेस.आईएमएल ओवरराइड करने के लिए रणनीतियां?
- 13. क्यों अंतिम रूप विधि ओवरराइड करने के लिए
- 14. रेल से ओवरराइड करने के लिए?
- 15. Symfony2: कोर टेम्पलेट को ओवरराइड करने के लिए कैसे?
- 16. एक्शनलिंक व्यवहार को ओवरराइड करने के लिए कैसे करें
- 17. मौजूदा एक्सटेंशन विधि को ओवरराइड करने के लिए कैसे करें
- 18. EntityFramework गुणों को ओवरराइड करने के लिए कैसे करें
- 19. क्यूटी में टैब चौड़ाई को ओवरराइड करने के लिए कैसे?
- 20. बराबर में समानता का परीक्षण करने के लिए GetHashCode का उपयोग
- 21. अगर कोई समान() को ओवरराइड करते समय GetHashCode() को ओवरराइड करने में विफल रहता है तो क्या गलत हो सकता है?
- 22. कब प्राप्त करने के लिए जब PowerPermanentIDsForObjects :?
- 23. LINQ और अलग, बराबरी और gethashcode को लागू करने
- 24. टिप्पणी करने के लिए कोड (अन्य "कब")
- 25. कब cudaDevice सिंक्रनाइज़ करने के लिए?
- 26. जावा में System.out.flush() को कॉल करने के लिए कब/क्यों
- 27. कोड/मॉड्यूल में कोड को विभाजित करने के लिए कब?
- 28. व्यूस्टेट को अक्षम करने के लिए सुरक्षित कब है?
- 29. गो में फ़ाइल को फ़्लश करने के लिए कब?
- 30. एनएलटीके - पाठ को सामान्य करने के लिए कब?
मेरा सहकर्मी और मैं आज इस पर चर्चा कर रहा था। अब और अधिक समझ में आता है। धन्यवाद जॉन – RSolberg
जॉन के लिए धन्यवाद विवरण समझें। – tush1r
मान लें कि मेरे पास एक बिंदु है जिसमें निर्देशांक का वर्णन करने के लिए दो पूर्णांक हैं। मैं _unique_ हैशकोड कैसे वापस करूँगा ई जो केवल एक पूर्णांक बड़ा है? मेरी संरचना जितनी अधिक डेटा है, उतना ही उच्च डेटा को पूरी तरह से अलग डेटा के लिए प्राप्त करने का मौका है - क्या यह मेरे कार्यान्वयन (जिसमें समानता संचालन है) में 7 फ्लोट्स हैं, तो इसे लागू करने के लिए बेकार होगा? –