2009-07-30 16 views
7

यदि वैल्यू टाइप और रेफरेंस टाइप ऑब्जेक्ट टाइप से हैं जो एक संदर्भ प्रकार है, तो वैल्यू टाइप वैल्यू टाइप और रेफरेंस टाइप कैसे संदर्भित होता है जब वे सभी रिफर्नसे प्रकार से आते हैं।वैल्यू टाइप वीएस रेफरेंस टाइप - ऑब्जेक्ट क्लास सी #

उत्तर

12

असल में, यह

किसी भी struct (अर्थात कुछ भी ValueType से विरासत में मिली) ;-p एक धोखा मूल्य प्रकार अर्थ विज्ञान के साथ इलाज किया जाता है। लेकिन मुक्केबाजी रूपांतरणobject आवश्यकतानुसार है; जिसका अर्थ है कि यदि आपने struct को object पर डाला है, तो यह आपके मूल्य * से डेटा (क्लोन के रूप में) युक्त एक विशेष वस्तु (प्रबंधित ढेर पर) बनाएगा।

बॉक्स किए गए संस्करण एक संदर्भ प्रकार है। आप इसे struct संस्करण पर वापस (कास्टिंग करके) अनबॉक्स कर सकते हैं, जो इसे उलट देता है (ऑब्जेक्ट से क्लोन डेटा को आपके स्थानीय मूल्य में ढेर पर कॉपी करता है)।


* = जब तक कि यह एक खाली Nullable<T>, है null को जो बक्से; इसी तरह, null खाली Nullable<T> पर अनबॉक्स।

+0

क्या आप मुझे समझा सकते हैं या जादू (धोखाधड़ी) कैसे हो रहा है इस पर एक लिंक को इंगित कर सकते हैं? यानी स्ट्रक्चर वैल्यू टाइप है जबकि ऑब्जेक्ट रेफरेंस टाइप – skjagini

+0

@skjagini - बस, कंपाइलर और रनटाइम आसानी से स्पॉट कर सकता है कि कुछ 'वैल्यू टाइप' से लिया गया है, और इसे अलग तरीके से इलाज करें ... इसके अलावा? ECMA335 –

+0

+1 हालांकि सी # जैसे भाषाएं बताती हैं कि एक बॉक्सिंग संरचना एक मूल्य प्रकार है, सीएलआर के गलतियों के भीतर प्रत्येक प्रबंधित मूल्य प्रकार में एक समान वर्ग प्रकार होता है जो संबंधित मान प्रकार के क्षेत्र को समाहित करता है, और उन सभी सदस्यों को लपेटता है वह क्षेत्र यहां तक ​​कि अगर सी # भाषा का नमूना ऐसी चीज को एक मूल्य प्रकार कहता है, तो यह एक संदर्भ प्रकार के रूप में व्यवहार करेगा। – supercat

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