आप जो देख रहे उसके सिर दिखा विरासत कोड का एक सा है।
इस मामले के केंद्र में VT_BOOL प्रकार है। विजुअल बेसिक 6.0 ने अपने बूलियन मानों के लिए VT_BOOL प्रकार (AKA VARIANT_BOOL) का उपयोग किया। एक VARIANT_BOOL के लिए सही मान VARIANT_TRUE के साथ दर्शाया गया है जिसमें पूर्णांक मान -1 है। .NET में रूपांतरण के दौरान यह निर्णय लिया गया था कि एक बूलियन मान को एक इंटीजर मान में बदलने के लिए विजुअल बेसिक रूपांतरण दिनचर्या का उपयोग करते समय, विजुअल बेसिक 6.0 सेमेन्टिक्स रिटर्न वैल्यू पर बनाए रखा जाएगा; यह -1 होगा।
पहला निहित रूपांतरण बी = i लाइन के साथ होता है। हुड के तहत यह पूर्णांक से बूलियन तक एक अंतर्निहित रूपांतरण करता है। कोई गैर-शून्य मान सत्य माना जाता है, इसलिए परिणामी मान सत्य है।
हालांकि, कोड की निम्न पंक्ति एक पूर्णांक प्रकार के लिए एक अंतर्निहित रूपांतरण कर रही है।
हुड इस दृश्य मूल रूपांतरण दिनचर्या (
CType या
CInt) में से एक का उपयोग करता है एक पूर्णांक के लिए मूल्य कन्वर्ट करने के लिए के तहत
। जैसे कि विजुअल बेसिक अर्थशास्त्र खेल में हैं और मूल्य लौटाया गया है -1।
अगली दिलचस्प पंक्ति Convert.ToInt32()
लाइन है। यह एक .NET रूपांतरण दिनचर्या का उपयोग कर रहा है जो विजुअल बेसिक अर्थशास्त्र का उपयोग नहीं करता है। इसके बजाए, यह एक वास्तविक बूलियन मान के लिए अंतर्निहित BCL प्रतिनिधित्व देता है जो 1.
आप इस बारे में कुछ जोड़ना चाहते हैं कि क्यों VT_BOOL का उपयोग किया गया था, और इसका मूल्य क्यों है -1। वीबी 6 में केवल "और" और "या" ऑपरेटरों का 1 सेट था, जो दोनों तार्किक और बिटवाई ऑपरेशंस (अधिकांश भाषाओं में 2 सेट होते हैं)। यह "और" को "और" के रूप में कार्यान्वित करके काम करता है और शाब्दिक डिफ़ॉल्ट -1 है। –
इस तरह "सत्य और एक्स" शून्य शून्य है कभी भी "x" शून्य नहीं है। –
आप यहां अधिकतर असंबंधित प्रश्न के उत्तर में "क्यों" की भावना प्राप्त कर सकते हैं: https://stackoverflow.com/a/46331671/3043 –