2011-06-06 14 views
5

2 और 3 मुक्केबाजी/अनबॉक्सिंग उदाहरण हैं?क्या ये मुक्केबाजी/अनबॉक्सिंग उदाहरण हैं

1) प्रलेखन उदाहरण:

int i = 123; 
object iBoxed = i; 
i = (int) iBoxed; 

2: मुक्केबाजी/unboxing रूप में अच्छी तरह है?

int i = 123; 
object iBoxed = i; 
i = Int32.Parse(iBoxed.ToString()); 

3: मुक्केबाजी/unboxing रूप में अच्छी तरह है?

int i = 123; 
object iBoxed = i; 
i = Convert.ToInt32(iBoxed); 

मुझे लगता है कि सभी उदाहरणों में तकनीकी रूप से वही होता है।

  1. एक मान प्रकार ढेर
  2. एक संदर्भ स्टैक पर बनाई गई है पर बनाया जाता है, मूल्य ढेर में कॉपी किया है।
  3. ढेर मूल्य संदर्भ में कॉपी किया गया है। संदर्भ हटा दिया जाता है।

तो मुझे लगता है कि 2 अंड 3 मुक्केबाजी/अनबॉक्सिंग के उदाहरण हैं?

+0

मुझे ऐसा लगता है, क्योंकि आप ऑब्जेक्ट "बॉक्स" में int डालते हैं और फिर आप उस बॉक्स को सेवानिवृत्त करते हैं। बॉक्स और अनबॉक्स के पीछे विचार एक मान प्रकार को संदर्भ प्रकार में बदलना है और –

उत्तर

7

तीनों उदाहरणों में की उम्मीद है।

उदाहरण 2 में: कोई unboxing यहाँ शामिल है, के रूप में ToString एक आभासी विधि है कि अंत में int.ToString हो जाएगी, जो तब int.Parse द्वारा पार्स किया जाएगा, लौटने है एक गैर बॉक्सिंग स्टैक पर int

उदाहरण 3 में: iBoxed विधि Convert.ToInt32 के शरीर में अनबॉक्स्ड हो और एक गैर बॉक्स्ड पूर्णांक के रूप में स्टैक पर फिर से लौट आए, होगा।

+0

@ डीटीबी: हाँ, मैंने यही कहने का प्रयास किया। अनबॉक्सिंग उन पंक्तियों में नहीं की जाती है जो हम देखते हैं, यह 'कनवर्ट.ओआईएनटी 32' के शरीर में होता है। –

+0

मैंने उदाहरण 2 तय किया, जिसने किसी भी तरह संकलित नहीं किया। – Robert

+0

मैंने आपके उत्तर को आपके निश्चित उदाहरण के अनुसार संपादित किया। –

1

यह object iBoxed = i मुक्केबाजी करता है।

iBoxedi की एक बॉक्स्ड प्रति है:

उदाहरण 2 int.Parse के बाद से अभ्यस्त काम एक स्ट्रिंग

+0

पर वापस उदाहरण है I Thx। – Robert

2

दूसरा उदाहरण मुक्केबाजी है लेकिन अनबॉक्सिंग नहीं है। Int.parse संकलित नहीं होगा क्योंकि यह एक स्ट्रिंग की अपेक्षा करता है और iBoxed एक वस्तु है। मुझे लगता है कि आप मुक्केबाजी और रूपांतरण की अवधारणाओं को मिश्रित कर रहे हैं। बॉक्सिंग वास्तव में एक मूल्य प्रकार यानी पीओडी लेने के बारे में है जैसा कि वे सी में कहते हैं और इसे संदर्भित करते हुए संदर्भ अनबॉक्सिंग उसी कंटेनर से उसी वैल्यू प्रकार को निकालने की क्षमता है।

पूर्व 2. फिक्स्ड

int i = 123; // Assigment 
object iBoxed = i ; // This is boxing 
i = int.parse(iBoxed.toString()); //This is unboxing but only for the twostring method the assignment is a value type copy. 
+0

मैंने उदाहरण 2 तय किया। – Robert

0

अपने सभी उदाहरणों में, मान प्रकार i एक वस्तु में बदला जा रहा है। यह MSDN के अनुसार मुक्केबाजी की परिभाषा है। बॉक्सिंग भी किया जा सकता है:

object boxed = (object)i; 

अनबॉक्सिंग ऑब्जेक्ट का मान वैल्यू टाइप पर वापस किया जाता है।
उदाहरण 1 unboxing है

उदाहरण 2 क्योंकि Parse एक string तर्क उम्मीद संकलित करने के लिए असफल हो जायेगी, लेकिन अगर आप iBoxed.ToString()

उदाहरण किया 3 मैं संदेह unboxing नहीं है क्योंकि Convert विधि सिर्फ मान प्रदान करेंगे unboxing होगा कि आप पास करते हैं।

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

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