2015-02-16 7 views
10

क्यों इस काम करता है:GetType() व्युत्पन्न वर्ग के प्रकार को कैसे जानता है?

Object o = "my string"; 
Console.WriteLine(o.GetType()); 

आउटपुट:

System.String 

यह मतलब होता अगर समारोह कॉल String वर्ग के लिए भेजा गया है, लेकिन यह GetType() के बाद से नहीं किया आभासी नहीं है।

+0

मेटाडाटा। आपको इसे सी # मूल के साथ नहीं मिला है। – Aron

+0

'ildasm.exe' –

+4

का उपयोग करने का प्रयास करें आप देख सकते हैं: [जब आप GetType() करते हैं तो वास्तव में क्या होता है?] (Http://stackoverflow.com/questions/3296526/what-does-really-happen-when- आप-डू-गेटटाइप) – Habib

उत्तर

3

निष्पादन-समय प्रकार ऑब्जेक्ट के डेटा का हिस्सा है। यह लगभग System.Object में एक छिपी पठन-केवल फ़ील्ड है, और GetType() बस उस फ़ील्ड का मान देता है। (यह काफी इतना आसान नहीं है, लेकिन है कि एक उचित सन्निकटन है।)

ध्यान दें कि यह जानकारी आवश्यक है CLR बाहर काम करने के लिए जहां आभासी तरीकों प्रेषण करने के लिए - इसलिए यदि आप सोच रहे थे अगर GetType आभासी थे कि यह काम करेगा, पूछना स्वयं को सीएलआर कैसे पता चलेगा कि कॉल करने के लिए कौन सा कार्यान्वयन है।

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