c# - Why returning false ? new Person("james") == new Person("james")? -
मुझे ओवरराइड GetHashCode
और equals
और दोनों तरीकों को एक ही परिणाम प्रदान करते हैं अलग-अलग ऑब्जेक्ट्स के लिए लेकिन झूठे क्यों हो रहे हैं?
क्लास प्रोग्राम {स्टैटिक व्हाईड मेन (स्ट्रिंग [] एजीआर) {कंसोल। विरसलाइन (नया व्यक्ति ("जेम्स") == नया व्यक्ति ("जेम्स ")); Console.ReadKey (); }} वर्ग व्यक्ति {निजी स्ट्रिंग नाम; सार्वजनिक व्यक्ति (स्ट्रिंग का नाम) {name = name; } सार्वजनिक ओवरराइड इंट होशकोड () {वापसी 1; } सार्वजनिक ओवरराइड बूल बराबर (वस्तु obj) {वापसी सच; }}
क्योंकि संदर्भ के लिए ==
ऑपरेटर चूक समानता। यह आपके समानता
विधि को कॉल नहीं करता है।
यदि आप चाहें तो ==
ऑपरेटर को ओवरराइड कर सकते हैं। देखें:
सी # में, दो समान प्रकार के समानताएं हैं: संदर्भ समानता (पहचान के रूप में भी जाना जाता है) और मूल्य समानता मूल्य समानता समानता का सामान्य अर्थ समझा जाता है: इसका मतलब है कि दो वस्तुओं में समान मूल्य होते हैं। उदाहरण के लिए, 2 के मान के साथ दो पूर्णांक में मूल्य समानता है संदर्भ समानता का अर्थ है कि तुलना करने के लिए दो वस्तुएं नहीं हैं। इसके बजाय, दो ऑब्जेक्ट संदर्भ हैं और दोनों ही एक ही ऑब्जेक्ट का संदर्भ देते हैं।
[...]
डिफ़ॉल्ट रूप से, ऑपरेटर == दो संदर्भ एक ही ऑब्जेक्ट को इंगित करते हैं, यह निर्धारित करके संदर्भ समानता के लिए परीक्षण इसलिए, इस प्रकार की कार्यक्षमता हासिल करने के लिए संदर्भ प्रकारों के ऑपरेटर को लागू करने की आवश्यकता नहीं है। जब एक प्रकार अपरिवर्तनीय होता है, तो यह है कि उदाहरण में शामिल डेटा को बदला नहीं जा सकता, ऑपरेटर == ओवरलोडिंग संदर्भ संदर्भ के बजाय मूल्य समानता की तुलना करने के लिए उपयोगी हो सकता है क्योंकि, अपरिवर्तनीय वस्तुओं के रूप में, उन्हें समान रूप से माना जा सकता है जैसा कि वे एक ही मूल्य है
Comments
Post a Comment