2010-07-30 9 views
49

मैं this article पर देख रहा था और वीबीएनईटी उदाहरण का पालन करने के लिए संघर्ष कर रहा हूं जो उठाए गए ऑपरेटरों को बताता है। ऐसा लगता है कि समकक्ष सी # उदाहरण या ट्यूटोरियल नहीं है। मुझे सामान्य रूप से ऑपरेटर ओवरलोडिंग के साथ अधिक अनुभव नहीं है, इसलिए वीबीएनईटी समकक्ष के साथ शर्तों को देखने की कोशिश कर रहे हैं, जबकि संभवतः शून्य करने के प्रकारों को पढ़ने के लिए सबसे अच्छा स्थान नहीं है ...उठाए गए ऑपरेटर क्या हैं?

कोई भी होगा उठाए गए ऑपरेटरों की व्याख्या प्रदान करने में सक्षम और कैसे वे निरर्थक प्रकारों द्वारा उपयोग किए जाते हैं? क्या इसका मतलब यह है कि निरर्थक प्रकार स्वयं ऑपरेटरों को अधिभारित नहीं करता है और ऑपरेटरों का अंतर्निहित प्रकार से इसका उपयोग करेगा जो इसका प्रतिनिधित्व करता है?

उठाए गए ऑपरेटरों के बारे में SO पर अधिक जानकारी नहीं प्रतीत होती है, इसलिए उम्मीद है कि यह कुछ अन्य लोगों की भी मदद कर सकता है।

धन्यवाद

+0

आह .. सोचा था कि (शून्य >> 1) अमान्य था और सोच रहा था कि ऐसा क्यों है ?? ऐसा लगता है कि x पर दूसरे कथन में int है (int? x = null; (x >> 1) ?? -1;)। सोचा कि ?? इसे एक वैध रूप में बदलता है ((x == null)? -1: (x >> 1);)। बाहर निकलता है यह इसके बजाय (x >> 1) पर चल रहा था, और वह (शून्य >> 1) मान्य है। – blizpasta

उत्तर

92

लिफ़्टेड ऑपरेटरों ऑपरेटरों जिसके द्वारा "उठाने" ऑपरेटरों जो पहले से ही गैर-व्यर्थ फार्म पर मौजूद नल प्रकार पर काम कर रहे हैं। तो उदाहरण के लिए, यदि आप करते हैं:

int? x = 10; 
int? y = 10; 
int? z = x + y; 

वह "+" ऑपरेटर उठाया गया है। यह वास्तव में Nullable<int> पर मौजूद नहीं है लेकिन सी # कंपाइलर ऐसा करता है जैसे यह करता है, सही चीज़ करने के लिए कोड उत्पन्न करता है। (ज्यादातर मामलों के लिए, यह जांचने की बात है कि या तो ऑपरेंड शून्य है; यदि हां, तो नतीजा शून्य है। अन्यथा, दोनों ऑपरेटरों को अपने गैर-शून्य मूल्यों पर खोलें, सामान्य ऑपरेटर का उपयोग करें, और फिर परिणाम को वापस लपेटें शून्य मूल्य। हालांकि तुलना के आसपास कुछ विशेष मामले हैं।)

अधिक जानकारी के लिए C# spec के अनुभाग 6.4.2 (उठाए गए रूपांतरण ऑपरेटर) और 7.3.7 (उठाए गए ऑपरेटरों) देखें।

+3

यह उत्तर वास्तव में "सही चीज़" के बारे में कुछ भी नहीं कहता है, जो मुझे लगता है कि ऑपरेटर कैसे काम करते हैं इसका सबसे महत्वपूर्ण पहलू है। – Ani

+0

@ जोन्स स्केट: आपका लिंक सी # 5 स्पेक पर निर्देशित करता है; क्या आप यहाँ 5 कहने या 4 spec से लिंक करने का मतलब था? –

+0

@ सीᴏʀʏ: जब मैं उससे जुड़ा था तो यह सी # 4 का नमूना था, लेकिन वह लिंक अब सी # 5 स्पेक पर जाता है ... यह कुछ महीनों में सी # 6 का नमूना हो सकता है :) –

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

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