"वर्चुअल फ़ंक्शन टेबल" या "वर्चुअल विधि तालिका" प्रत्येक क्लास के विधि पॉइंटर्स की एक सूची है। इसमें कक्षा में आभासी तरीकों के पॉइंटर्स शामिल हैं।
कक्षा के प्रत्येक उदाहरण में तालिका के लिए एक सूचक होता है, जिसका उपयोग उदाहरण से वर्चुअल विधि को कॉल करते समय किया जाता है। ऐसा इसलिए है क्योंकि वर्चुअल विधि के लिए कॉल को ऑब्जेक्ट के संदर्भ की कक्षा नहीं, वास्तविक वस्तु के वर्ग से जुड़ी विधि को कॉल करना चाहिए।
आप उदाहरण के लिए एक स्ट्रिंग के लिए एक वस्तु संदर्भ है, तो:
object obj = "asdf";
और आभासी विधि ToString फोन:
string text = obj.ToString();
यह String.ToString विधि, नहीं वस्तु का प्रयोग करेंगे। ToString विधि। यह स्ट्रिंग क्लास की वर्चुअल विधि तालिका का उपयोग कर रहा है (जो स्ट्रिंग इंस्टेंस में पॉइंटर इंगित कर रहा है), ऑब्जेक्ट क्लास की वर्चुअल विधि तालिका नहीं।
क्या मैं सही ढंग से समझता हूं कि "विधि तालिका" किसी भी प्रकार के अनुसार बनाई गई है। इसलिए मान प्रकार में "विधि तालिका" भी है। और एक और सवाल यह है कि कैसे एक प्रकार को पता चला कि इसमें "विधि तालिका" है? क्या "विधि तालिका" एक प्रकार-ऑब्जेक्ट में संग्रहीत या संदर्भित है? लेकिन मान प्रकार में टाइप-ऑब्जेक्ट पॉइंटर नहीं है। :/यहां एक संबंधित प्रश्न है: http://stackoverflow.com/questions/35185528/does-a-value-type-keep-type-pointer-sync-root-static-fields-like-a-reference/35185851# 35185851 – Spirit
@Spirit: हाँ, हर प्रकार में एक विधि तालिका होती है (कम से कम कुछ रूप में कुछ रूप में)। चूंकि मान प्रकारों के लिए कॉल गैर-आभासी हैं, सटीक विधियों को संकलित समय पर निर्धारित किया जाता है, इसलिए उन्हें वर्चुअल विधि तालिका की आवश्यकता नहीं होती है, उनके लिए केवल प्रतिबिंब उद्देश्यों के लिए निष्पादन योग्य में मौजूद होना आवश्यक होगा। मुझे नहीं पता कि विधि तालिका वास्तव में कहां संग्रहीत की जाती है, यह कार्यान्वयन पर निर्भर करेगा ताकि आप इसके लिए फ्रेमवर्क स्रोत कोड देख सकें (हालांकि कार्यान्वयन का वह हिस्सा सार्वजनिक नहीं हो सकता है)। – Guffa
धन्यवाद। आपका जवाब आपका बहुत स्पष्ट है। मुझे अंत में एक समान एसओ चर्चा मिली है: http://stackoverflow.com/questions/926352/how-is-valuetype-gettype-able-to-determine-the-type-of-the-struct – Spirit