2010-06-05 16 views
5
var i = new int[2]; 

क्या "i" को बॉक्स किया जाना माना जाता है?बॉक्सिंग और अनबॉक्सिंग

+1

कौन सी भाषा? सी#? – kennytm

+0

सी # भाषा में .. – Vivek

+1

@MarkRushakoff :) मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मैंने अपने गधे को हँसे, वास्तव में कुछ कॉफी बिछाया :)) –

उत्तर

4

सी # में ऐरे रेफरेंसियल प्रकार है इसलिए मुक्केबाजी की कोई आवश्यकता नहीं है। आप फिर भी इस उदाहरण में मुक्केबाजी होगा: मान लिया जाये कि इस सी # (var और सी # तरह सारणी वाक्य-विन्यास) है

var i = 123; 
object o = i; 
7

, नहीं, i बॉक्सिंग नहीं है। केवल आदिम मूल्य प्रकार (संख्यात्मक मानों को सोचें) को बॉक्स किया जा सकता है।

सरणी में मानों को या तो बॉक्स नहीं किया जाता है, क्योंकि आदिम सरणी में मान बॉक्स नहीं होते हैं।

+1

आप किसी भी संरचना को बॉक्स कर सकते हैं, जिसमें आप स्वयं लिखते हैं, इसलिए मुक्केबाजी है इससे थोड़ा दूर तक पहुंचने का तात्पर्य है। मूल्य प्रकार .NET में structs के रूप में लागू किए जाते हैं। – Donnie

9

कोई बॉक्स नहीं है। Var कीवर्ड का मतलब यह नहीं है कि चर बॉक्स बॉक्स किया गया है। यह रनटाइम के दौरान कोई रूपांतरण नहीं करता है। Var कीवर्ड कड़ाई से एक सी # निर्माण है। क्या वास्तव में हो रहा है जब आप वर का उपयोग करें:

var i = new int[1]; 

आईएल के रूप में यह देखता है:

int[] i = new int[1] 

अब अगर आप अगर आपके द्वारा की मैं इसे बॉक्स करता सरणी के भाग के लिए एक पूर्णांक आवंटित पूछ रहे हैं ?

जैसे:

i[0] = 2; 

कोई ऐसा नहीं होता।

var o = new object[1]; 

o[0] = 2; 

यह उदाहरण है और क्यों ArrayList का उपयोग कर 1.0, 1.1 (पूर्व जेनरिक) में (लगता है विस्तार योग्य सरणी) एक भारी लागत था:

यह जो करता है करने का विरोध किया है। निम्नलिखित टिप्पणी के रूप में अच्छी तरह से object[] उदाहरण के लिए लागू होता है:

कोई संदर्भ या मान प्रकार है कि एक ArrayList में जोड़ा वस्तु को परोक्ष Upcast है। यदि आइटम मान प्रकार हैं, तो उन्हें सूची में जोड़ा गया है, और पर उन्हें अनबॉक्स किए जाने पर उन्हें बॉक्स किया जाना चाहिए। दोनों कास्टिंग और मुक्केबाजी और अनबॉक्सिंग ऑपरेशंस प्रदर्शन को घटाएं; का प्रभाव मुक्केबाजी और अनबॉक्सिंग काफी परिदृश्यों में महत्वपूर्ण हो सकता है जहां आप बड़े संग्रहों पर पुन: प्रयास करना चाहिए।

MSDN Link to ArrayList

Link to Boxing in C#

3

मुक्केबाजी केवल जब एक value type (अर्थात एक आदिम प्रकार, struct या गणन) एक संदर्भ प्रकार के रूप में इलाज चल रहा है होता है। आपकी सरणी को int प्रकार के मान रखने के लिए घोषित किया गया है। var keyword केवल मैन्युअल रूप से निर्दिष्ट करने के बजाय, परिवर्तनीय i के प्रकार का अनुमान लगाने के लिए संकलक को बताता है।

आप लिखा था:

var i = new object[2]; 

संकलक object[] i = new object[2] है कि अनुवाद होगा, और किसी भी int मूल्यों तुम वहाँ में डाल बॉक्सिंग की जाएगी। आपके द्वारा उसी सरणी में डाले गए किसी भी संदर्भ प्रकार को किसी भी मुक्केबाजी की आवश्यकता नहीं होगी।

संक्षेप में, var में मुक्केबाजी के साथ कुछ लेना देना नहीं है।

यहां .NET में diagram of different types है। आप .NET Type fundamentals पढ़ना भी चाह सकते हैं।

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