2012-07-16 15 views
9

जब हम डेटा प्रकार को आदिम डेटा प्रकारों के बीच रूपांतरित करते हैं तो इसे डेटा प्रकार कास्टिंग कहा जाता है।बॉक्सिंग और अनबॉक्सिंग भी कास्टिंग है?

लेकिन जब वैल्यू टाइप और रेफरेंस टाइप के बीच कनवर्ट किया जाता है तो हम इसे मुक्केबाजी और अनबॉक्सिंग के रूप में कहते हैं।

क्या मुक्केबाजी और अनबॉक्सिंग को कास्टिंग कहा जा सकता है?

उत्तर

8

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

+0

त्वरित उत्तर के लिए धन्यवाद। किसी अन्य जवाब के लिए प्रतीक्षारत! – LaysomeSmith

0

मुक्केबाजी के लिए एक प्रकार परिवर्तित करने के लिए है के रूप में मूल रूप से एक मूल्य मुक्केबाजी है करने के लिए प्रक्रिया है एक अज्ञात ऑब्जेक्ट में टाइप करें जिसे बाद में अनबॉक्स किया जा सकता है।

int x = 567; 
object y = x; //boxing 

int z = (int) y; //z will be 123 

int x = 567; 
object y = (object)x; //explicit boxing (not necessary) 

int z = (int) y; //z will be 123 

मुक्केबाजी/अनबॉक्सिंग के रूप में, जबकि मुक्केबाजी हम सिर्फ एक चर के चारों ओर एक आवरण लगा रहे हैं प्रकार कास्टिंग के साथ भ्रमित नहीं होना चाहिए। प्रकार कास्टिंग करके आप वास्तव में चर या वस्तु के प्रकार को बदल रहे हैं।

Double x = 3.14444; 
Integer y = (Integer)x; //(type cast or static cast in c++) changing the type and loosing the original value too in this case. 


int x = 567; 
object y = (object)x; //explicit boxing (not necessary) 

float z = (float) y; //another example of type casting while unboxing 
+0

सवाल यह है कि क्या हम बॉक्सिंग और अनबॉक्सिंग को टाइप कास्टिंग के रूप में कॉल कर सकते हैं? – LaysomeSmith

+0

@LaysomeSmith ने थोड़ा और विस्तार जोड़ा – Mayank

0

कास्टिंग: (यह दूसरे में एक प्रकार का उदाहरण परिवर्तित करने के बारे में मूल रूप से है)

int a = (int) 3.14 // from the example above does casting with loosing precision. 
double b = a; // casting again (we may write (double) a - gives the same result). 

मुक्केबाजी: (ढेर करने के लिए नकल मान प्रकार की प्रक्रिया)

object c = new MyStruct(); // MyStruct = struct. 
object d = 1; 
object e = (int) 3.14; // here we have actually casting and then boxing. 

अनबॉक्सिंग (नकल बॉक्स किए गए मान को वापस स्टैक पर टाइप करें):

Button f = (MyStruct) c; 
int g = (int) d; // it still unboxing however it looks exactly like the line #1 above. 

उम्मीद है कि यह मदद करता है।

0

प्रत्येक गैर-शून्य मूल्य प्रकार के समान सदस्य के साथ संबंधित हेप-ऑब्जेक्ट प्रकार होता है। एक मूल्य प्रकार भंडारण स्थान बॉक्सिंग एक नया हेप-प्रकार उदाहरण बनाता है और सभी फ़ील्ड को मान-प्रकार भंडारण स्थान से नए उदाहरण के संबंधित फ़ील्ड में प्रतिलिपि बनाता है। किसी मान प्रकार को अनबॉक्स करना सभी फ़ील्ड को इसके संबंधित हीप-ऑब्जेक्ट प्रकार के उदाहरण से मूल्य-प्रकार संग्रहण स्थान के संबंधित फ़ील्ड में प्रतिलिपि बनाता है।

2

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

मुक्केबाजी

  1. int Val = 1;
  2. Object Obj = Val; //Boxing

पहली पंक्ति हम एक मान प्रकार वैल बनाया और वैल को एक मान निर्दिष्ट। दूसरी पंक्ति, हमने ऑब्जेक्ट ओब्जे का एक उदाहरण बनाया और ओएलजे को वैल के मूल्य को असाइन किया।उपर्युक्त ऑपरेशन से (ऑब्जेक्ट Obj = i) हमने मान प्रकार के मान को किसी संबंधित संदर्भ प्रकार के मान में परिवर्तित कर देखा है। इन प्रकार के ऑपरेशन को बॉक्सिंग कहा जाता है।

अनबॉक्सिंग

  1. int Val = 1;
  2. Object Obj = Val; //Boxing
  3. int i = (int)Obj; //Unboxing

पहले दो लाइन से पता चलता एक मूल्य प्रकार बॉक्स करने के लिए कैसे। अगली पंक्ति (int i = (int) Obj) ऑब्जेक्ट से वैल्यू टाइप निष्कर्ष निकालती है। यह किसी संदर्भ प्रकार के मान को मान प्रकार के मान में परिवर्तित कर रहा है। इस ऑपरेशन को अनबॉक्सिंग कहा जाता है।

बॉक्सिंग और अनबॉक्सिंग कम्प्यूटेशनल रूप से महंगा प्रक्रियाएं हैं। जब एक वैल्यू टाइप बॉक्स किया जाता है, तो पूरी तरह से नई ऑब्जेक्ट आवंटित और निर्माण की जानी चाहिए, अनबॉक्सिंग के लिए आवश्यक कास्ट भी महंगा कंप्यूटेशनल

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