जो व्यवहार आप देख रहे हैं उसमें अंतर identity and representation के बीच का अंतर है।
बॉक्स से निकालना एक पहचान डाली है, और एक प्रतिनिधित्व के संरक्षण आपरेशन। int
को byte
पर कास्ट करना, हालांकि, प्रतिनिधित्व-बदलते (क्योंकि सटीकता का संभावित नुकसान होता है)।
आप एक InvalidCastException
मिलता है जब आप के रूप में int
Unbox करने की कोशिश एक byte
क्योंकि बॉक्स्ड मूल्य की पहचान एक byte
, यह एक int
है नहीं है। जब आप byte b = (byte)obj
लिखते हैं, आप क्रम, कह रहे हैं मुझे पता है कि क्या वहाँ में है है एक byte
, लेकिन क्या तुम सच में है कहने के लिए, मुझे लगता है कि क्या में है वहाँ एक byte
को परिवर्तित किया जा सकता है इसका मतलब यह ।
उत्तरार्द्ध कथन बनाने के लिए, आपको सबसे पहले पहचान ऑब्जेक्ट की घोषणा करना है, जो int
है। फिर और केवल तभी आप byte
पर एक प्रतिनिधित्व-बदलते रूपांतरण कर सकते हैं।
ध्यान दें कि यह तब भी लागू होता है जब लक्ष्य का प्रकार "बड़ा" होता है - यानी Int64
। सभी स्पष्ट रूपांतरण जिसके लिए गंतव्य प्रकार स्रोत प्रकार के विरासत पेड़ में नहीं है, को प्रतिनिधित्व-परिवर्तन माना जाता है। और चूंकि सभी प्रकार System.Object
से प्राप्त होते हैं, इसलिए परिभाषा द्वारा अनबॉक्सिंग प्रतिनिधित्व को बदल नहीं सकता है।
धन्यवाद हारून, जो इसे अच्छी तरह से समझाता है। –