2012-03-21 20 views
6

मेरे पास कक्षा RTSG :: XML3D :: OpenGLMeshMA का ऑब्जेक्ट है। जब इसकी विधि में ब्रेकप्वाइंट पर रोका RTSG :: XML3D :: OpenGLMeshMA :: onXflowStateChanged मैं घड़ी विंडो में निम्न भाव जोड़ें:कास्टिंग ऑब्जेक्ट का पता उसी वर्ग में क्यों करता है क्योंकि इस बिंदु के परिणामस्वरूप किसी अन्य ऑब्जेक्ट वैल्यू में परिणाम होता है?

enter image description here

यह कैसे हो सकता है वस्तु के कच्चे पते में casted कि एक ही पॉइंटर प्रकार के रूप में यह एक अलग वस्तु में परिणाम (ऑब्जेक्ट और uniqieId सदस्यों के पहले और दूसरी पंक्तियों में अलग-अलग मान हैं)?

सिस्टम जानकारी: वीएस 2008 3.5 एसपी 1, विन 7 64-बिट।

+0

मुझे लगता है, हालांकि मुझे इसके लिए प्रलेखन नहीं मिल रहा है, कि _this_ वस्तु का आंतरिक संदर्भ है। जबकि आपका पहला इसका बाहरी संदर्भ है। जो बताता है कि आप केवल उदाहरण के भीतर _this_ का उपयोग क्यों कर सकते हैं, इसका कोई बाहरी संदर्भ नहीं है। –

+0

@ जोशुआ ड्रेक _internal संदर्भ_ क्या है और यह _external context_ से अलग कैसे है? ये पॉइंटर्स हैं, संदर्भ नहीं, क्या वे नहीं हैं? –

+0

एक सूचक सामान्य अर्थ में एक संदर्भ है। सी # संस्करण के लिए [यह (सी #)] (http://msdn.microsoft.com/en-us/library/dk1507sz%28v=vs.71%29.aspx) देखें। –

उत्तर

0

एकमात्र उचित स्पष्टीकरण (डीबगर बग के अलावा) यह है कि आप एकाधिक विरासत का उपयोग कर रहे हैं। ऑब्जेक्ट की शुरुआत 0x0a72d4e4 नहीं है, यह कहीं और है (शायद एक सूचक उच्च या निम्न)। कास्ट के साथ लाइन उस पते को ऑब्जेक्ट की शुरुआत के रूप में पेश करने के लिए डीबगर को मजबूर कर रही है, और तदनुसार यह खराब मान पढ़ रहा है।

एकाधिक विरासत के साथ, 'इस' का मान ऑब्जेक्ट की शुरुआत के पते से अलग हो सकता है, और संकलक आवश्यकतानुसार समायोजन सम्मिलित करता है। इस पर चर्चा की गई है उदा। here, here

+0

-1: दिखाए गए दोनों अभिव्यक्तियों का एक ही प्रकार है। एकाधिक विरासत इसे समझा नहीं सकता है। इसके प्रकार से स्वतंत्र "ऑब्जेक्ट की शुरुआत" जैसी कोई चीज नहीं है, क्योंकि कोई ऑब्जेक्ट व्युत्पन्न ऑब्जेक्ट (विरासत शर्तों में) के उप-प्रोजेक्ट (लेआउट शर्तों में) हो सकता है। –

+0

बेशक शीर्ष वस्तु दूसरी पंक्ति में ऑब्जेक्ट के समान प्रकार दिखाती है। यह सी-शैली का कलाकार रहा है। – DrPizza

+0

बेशक यह करता है। और * एकाधिक * अलग-अलग विरासत केवल एक ही सूचक की एक अलग व्याख्या को समझा सकता है जब * प्रकार * अलग होता है। मान लीजिए कि "यह" वास्तव में एक व्युत्पन्न वस्तु के ओपनजीएलएमएसएमए सबोबजेक्ट के लिए एक सूचक है जो कई ओपनजीएलएमशएमए से वंचित, गैर-वर्चुअल रूप से प्राप्त होता है, जैसा लगता है। फिर भी, कोई तरीका नहीं है कि दो (समान) पॉइंटर्स ऑब्जेक्ट के भीतर OpenGLMeshMA के विभिन्न उदाहरणों को इंगित करेंगे। इस आईडीई में कुछ और होना चाहिए। –