हर प्रकार जो System.ValueType
से निकला है, System.Enum
के अपवाद के साथ की परिभाषा, वास्तव में चीजों के दो प्रकार परिभाषित करता है। उत्तरार्द्ध के उदाहरणों को स्पष्ट रूप से पूर्व में परिवर्तित किया जा सकता है (उसमें निहित डेटा की एक प्रति बनाते हुए), और पूर्व के उदाहरण स्पष्ट रूप से उत्तरार्द्ध (इसी तरह) के लिए टाइपकास्ट हो सकते हैं; भले ही दोनों प्रकार की चीजें उसी System.Type
द्वारा वर्णित की गई हों, और हालांकि उनके पास एक ही सदस्य हैं, वे बहुत अलग व्यवहार करते हैं।
ए List<AnyClassType>
ढेर-ऑब्जेक्ट संदर्भों का एक समूह पकड़ने की उम्मीद करेगा; चाहे प्रश्न में सूची List<String>
, List<StringBuilder>
, List<Button>
, या जो भी हो, सूची के उपयोगकर्ताओं के लिए ब्याज हो, लेकिन List<T>
के लिए वास्तव में रुचि नहीं है। यदि कोई List<Button>
को IEnumerable<Control>
पर रखता है, तो कोई व्यक्ति जो GetEnumerator()
विधि को कॉल करता है, वह उस ऑब्जेक्ट को प्राप्त करने की अपेक्षा करेगा जो Control
से प्राप्त ढेर ऑब्जेक्ट्स के आउटपुट संदर्भों को संदर्भित करेगा; List<Button>.GetEnumerator()
से वापसी उस उम्मीद को पूरा करेगी।इसके विपरीत, अगर किसी को List<Int32>
List<Object>
पर डालना था, तो GetEnumerator()
नामक कोई व्यक्ति उस चीज की अपेक्षा करेगा जो ढेर ऑब्जेक्ट संदर्भों को आउटपुट करेगा, लेकिन List<Integer>.GetEnumerator
इसके बजाय मूल्य-प्रकार पूर्णांक आउटपुट करने वाली कुछ चीज़ों को उत्पन्न करेगा।
Int32
मानों को List<Object>
या List<ValueType>
में संग्रहीत करना संभव है; ऐसी सूची में एक पूर्णांक संग्रहीत करने से इसे अपने ढेर ऑब्जेक्ट फॉर्म में बदल दिया जाएगा और इसके संदर्भ में स्टोर किया जाएगा; कॉलिंग GetEnumerator()
कुछ ऐसी चीज उत्पन्न करेगी जो ढेर संदर्भों को आउटपुट करे। हालांकि, निर्दिष्ट करने का कोई तरीका नहीं है कि ऐसी सूची में केवल Int32
से संबंधित हीप प्रकार के उदाहरण होंगे। सी ++/सीएलआई में, "हेप-संग्रहीत वैल्यूटाइप के संदर्भ" प्रकार के चर घोषित करना संभव है, लेकिन जेनेटिक प्रकारों के पीछे तंत्र इस प्रकार के साथ काम नहीं कर सकते हैं।
लेकिन Int32 ऑब्जेक्ट में डाला जा सकता है। क्या यह एक संवेदना बनाने के लिए पर्याप्त नहीं है? या यह एक कंपाइलर सुविधा है? – Vasaka
@ वासाका: यह एक मुक्केबाजी ऑपरेशन है और एक संदर्भ रूपांतरण नहीं है। यह तकनीकी है, लेकिन समान वाक्यविन्यास के बावजूद प्रत्येक मामले में वास्तव में संकलक वास्तव में क्या करता है। – Jon
... सभी सामान्य वर्गों और structs के प्रकार पैरामीटर के रूप में हैं; इंटरफ़ेस और प्रतिनिधि प्रकारों के लिए केवल भिन्नता का प्रकार टाइप किया जा रहा है। – phoog