c# - Why is == overridden in System.Double but not in System.Int32 and what are the ramifications of that? -


सी # में डबल ओवरराइड क्यों == लेकिन

मैं एमएसडीएन लाइब्रेरी को देखता हूँ।

मैं इस लिंक को डबल के बारे में देखता हूं जो ज्यादा नहीं कहता (हालांकि मैं डबल ऑब्जेक्ट के लिए डबल आकृति है) .. यह उदाहरण के लिए विधियों को नहीं दिखाता है।

लेकिन सिस्टम पर यह लिंक। डबल

छवि के लिए डबल एमएसडीएन में, फिर तरीकों के बाद फ़ील्ड सूचीबद्ध करने से पहले), यह ऑपरेटरों को दिखाता है, और यह दर्शाता है कि समानता ऑपरेटर ओवरराइड किया गया है

छवि विवरण दर्ज करें यहां

और मैं" ऑपरेटर "के तहत समानता पर क्लिक कर सकते हैं और

  सार्वजनिक स्थिर बूल ऑपरेटर == (डबल बायां, डबल दाएं)   

जबकि जब मैं System.Int32 छवि के लिए Int को देखता हूँ 32 में एमएसडीएन नीचे है

यहां छवि विवरण दर्ज करें

उस छवि में देखें, ( System.Int32 का पृष्ठ) ऐसा लगता है कि == ओवरराइड नहीं किया गया है।

क्यों और क्या इस का असर क्या है?

डबल। एनएएन की वजह से एक संभावित कारण है।

इसके लिए: एमएसडीएन का कहना है: यदि समानता ऑपरेटर (==) का उपयोग करके दो डबल। एनएएन मूल्यों को समानता के लिए परीक्षण किया जाता है, तो परिणाम गलत है; दो डबल। एनएएन मूल्यों को बराबर नहीं माना जाता है। यदि उन्हें समानता के आधार पर समानता के लिए परीक्षण किया जाता है, तो परिणाम सही है। जब आप यह निर्धारित करना चाहते हैं कि एक डबल का मान संख्या नहीं है (एनएएन), वैकल्पिक ISNaN विधि को कॉल करना है।

इसलिए == ऑपरेटर और डबल के समान तरीकों में भिन्न व्यवहार का संबंध है डबल करने के लिए। एनएएन, मुझे लगता है यह क्यों == डबल के लिए ओवरराइड है इंट के लिए, ऐसा कोई विशेष मामला नहीं है।

मतभेदों को दिखाने के लिए कोड:

  सिस्टम का उपयोग कर; पब्लिक क्लास उदाहरण {सार्वजनिक स्थिर शून्य मुख्य () {कंसोल। WrightLine ("नाएन == NaN: {0}", डबल। एनएएन == डबल। एनएएन); कंसोल.प्रकाश रेखा ("नाएन! = एनएएन: {0}", डबल। एनए! = डबल। एनएएन); कंसोल.प्रकाशलाइन ("ना एन। एक्लल्स (एनएएन): {0}", डबल। एनएएन। एक्लॉल्स् (डबल। एनएएन)); कंसोल.वाइटलाइन ("! नाएन। एक्लल्स (एनएएन): {0}",! डबल। एनएएन। एक्लॉल्स् (डबल। एनएएन)); कंसोल.प्रकाश रेखा ("आईसैन: {0}", डबल। आईएसएनएएन (डबल। एनएएन)); कंसोल.प्रकाशलाइन ("\ nNaN & gt; नैन: {0}", डबल। एनएएन & gt; डबल। एनएएन); कंसोल.प्रकाशलाइन ("नाएनए; = एनएएन: {0}", डबल। एनएएन & gt; = डबल। एनएएन); कंसोल.प्रकाशलाइन ("नाएन और लेफ्टिनेंट; एनएएन: {0}", डबल। एनएएन & लेफ्टिनेंट; डबल। एनएएन); कंसोल.प्रकाशलाइन ("नाएन & lt; 100.0: {0}", डबल। एनएएन & lt; 100.0); कंसोल.प्रकाशलाइन ("नाएन और एलटी; = 100.0: {0}", डबल। एनएएन & lt; = 100.0); कंसोल.प्रकाशलाइन ("नाएन & gt; = 100.0: {0}", डबल। एनएएन & gt; 100.0); कंसोल.प्रकाशलाइन ("नाएन। कॉम्पेरटेओ (एनएएन): {0}", डबल। एनएएन। कॉम्पेरेटो (डबल। एनएएन)); कंसोल.प्रकाशलाइन ("नाएन कॉम्परेटो (100.0): {0}", डबल। एनएएन। कॉम्पेरटेओ (100.0)); कंसोल.प्रकाशलाइन ("(100.0) .कंपर्स टू (डबल। एनएएन): {0}", (100.0) .कंपर्स (डबल। एनएएन)); }} // उदाहरण निम्न आउटपुट प्रदर्शित करता है: // NaN == NaN: गलत // NaN! = NaN: True // NaN.Equals (NaN): True //! NaN.Equals (NaN): गलत // ISNaN: True // // NaN & gt; नाएन: झूठी // नाएन & gt; = नाएन: गलत // एनएएन & lt; नाएन: गलत // एनएएन & lt; 100.0: गलत // नाएन & lt; = 100.0: गलत // NaN> = 100.0: गलत // NaN.CompareTo (NaN): 0 // NaN.CompareTo (100.0): -1 // (100.0) .कंपर्स डबल। एनएएन): 1   

कोड से भी है

Comments

Popular posts from this blog

Verilog Error: output or inout port "Q" must be connected to a structural net expression -

jasper reports - How to center align barcode using jasperreports and barcode4j -

c# - ASP.NET MVC - Attaching an entity of type 'MODELNAME' failed because another entity of the same type already has the same primary key value -