2011-08-16 16 views
6

संभव डुप्लिकेट:
Why must we define both == and != in C#?ओवरलोडिंग + =, +, ==, और = ऑपरेटरों

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

उत्तर

7

एक समान प्रश्न asked before रहा है।

सबसे बड़ा कारण यह है कि जब आप == और != ऑपरेटरों को अधिभारित करते हैं, तो आपको एक बूलियन वापस नहीं करना पड़ता है। यदि आप एक बुलियन लौट नहीं रहे हैं, तो आप केवल प्रशंसनीय ऑपरेटर को उलटा नहीं कर सकते हैं। अन्य संभावित कारण हैं जिन्हें वे अलग-अलग अधिभारित कर रहे हैं, आप उन अन्य कारणों से उस प्रश्न के उत्तर देख सकते हैं।

एक वैध कारण है कि आप += अधिभारित नहीं कर सकते हैं और इसलिए यह + ऑपरेटर के माध्यम से पूरी तरह से किया जाता है। मुझे इस तथ्य के साथ क्या करना है कि आप सी # में असाइनमेंट ऑपरेटर को ओवरराइड नहीं कर सकते हैं, यह भाषा मानक का हिस्सा है। += वृद्धि और असाइनमेंट है, जिसके बाद आप सी # में ओवरलोड नहीं कर सकते हैं।

+4

+1 बस पागलपन की कल्पना करें यदि आप '+' और '+ =' अलग से लोड कर सकते हैं ... –

+0

यदि सी # और .net ने परिवर्तनीय संरचनाओं के साथ बुरी चीजें नहीं की हैं (उत्परिवर्तनीय structs बुरा नहीं हैं - कुछ चीजें .net उनके साथ होती हैं), या यदि उन्होंने कक्षाओं को उनके ऑब्जेक्ट्स के संदर्भों के बुरे विचित्र साझाकरण को प्रतिबंधित करने की अनुमति दी है, तो यह अलग-अलग + = और + ऑपरेटरों के लिए उपयोगी होगा, क्योंकि "+" ऑपरेटर का उपयोग करने से संकेत मिलेगा मूल अनछुए की प्रतिलिपि बनाकर छोड़ दें, जबकि "+ =" का अर्थ है मूल को संशोधित किया जा सकता है। नोट, बीटीडब्ल्यू, वह घटनाएं "+ =" और "- =" का समर्थन करती हैं, लेकिन "+" और "-" का समर्थन नहीं करती हैं। – supercat

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