2009-03-06 5 views
5

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

public static bool operator ==(Landscape a, Landscape b) 
{ 
    return a.Width == b.Width && a.Height == b.Height; 
} 

public static bool operator !=(Landscape a, Landscape b) 
{ 
    return !(a.Width == b.Width && a.Height == b.Height); 
} 
+1

मैं इन ऑपरेटरों को संदर्भ प्रकारों के लिए ओवरलोड करने से बचने की कोशिश करता हूं क्योंकि अधिकांश लोग ऑब्जेक्ट समानता का परीक्षण करने के लिए == की अपेक्षा करेंगे। –

उत्तर

8

उपयोग Object.ReferenceEquals प्रयास करें स्थिर विधि।

बेशक, अपनी पूर्ण कार्यक्षमता को बनाए रखने के लिए == और! = विधि के क्रम में, आपको समानताएं और GetHashCode ओवरराइड करना चाहिए ताकि वे कॉलर्स को प्रतिक्रियाओं का लगातार सेट वापस कर सकें।

4
+0

'संदर्भ एक्वाल्स (ऑब्जेक्ट, ऑब्जेक्ट) 'ऑब्जेक्ट' क्लास की एक स्थिर विधि है और इसका उपयोग तब तक नहीं किया जा सकता जब तक कि आप इसके लिए एक एक्सटेंशन विधि नहीं लिखते। इसका उपयोग करने के लिए, किसी को कॉल करना होगा: 'object.ReferenceEquals (ए, बी)' –

4

यह जांचने के लिए कि दोनों बिंदु एक ही वस्तु के लिए हैं या नहीं। आपको ऑब्जेक्ट। रेफरेंस एक्वाल्स विधि का उपयोग करना चाहिए। यदि दोनों समान हैं या दोनों शून्य हैं तो यह सच हो जाएगा। अन्यथा यह झूठी

0

मुझे यह एक पुराना सवाल पता है, लेकिन यदि आप == या ऑब्जेक्ट। एक्वाल्स विधि को अधिभारित करने जा रहे हैं, तो आपको रिवर्स ऑपरेटर को अधिभारित करना चाहिए! =।

और इस मामले में, जब आप आंतरिक संख्या की तुलना कर रहे हैं, तो आपको अन्य तुलना ऑपरेटर <,>, < =,> = को अधिभारित करना चाहिए।

जो लोग भविष्य में अपनी कक्षा का उपभोग करते हैं, चाहे वह तीसरे पक्ष के उपभोक्ता हों, या आपके कोड को लेने वाले डेवलपर्स, कोडरश या रिफैक्टर जैसे कुछ का उपयोग कर सकें, जो स्वचालित रूप से तर्क को "फ्लिप" कर देगा (जिसे रिवर्सिंग भी कहा जाता है) सशर्त) और उसके बाद 25 नेस्टेड अगर सिंड्रोम से तोड़ने के लिए इसे फ़्लैट करें। यदि उनका कोड ऐसा करता है, और आपने == ऑपरेटर को अधिभारित किए बिना! = ऑपरेटर को ओवरलोड किया है, तो यह आपके कोड के इच्छित अर्थ को बदल सकता है।

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

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