2011-12-01 7 views
7

कक्षा में "भंडारण" मान प्रकारों में केवल ऑब्जेक्ट्स के संदर्भ हो सकते हैं लेकिन जब आप एक मान प्रकार जैसे पूर्णांक संग्रहीत करते हैं तो क्या होता है?एक ArrayList

string str = "Hello"; 
int i = 50; 

ArrayList arraylist = new ArrayList(); 

arraylist.Add(str); // Makes perfectly sense: 
        // Reference to string-object (instance) "Hello" is added to 
        // index number 0 

arraylist.Add(i); // What happens here? How can a reference point to a value 
        // type? Is the value type automatically converted to an 
        // object and thereafter added to the ArrayList? 
+0

के संभावित डुप्लिकेट [कैसे .NET में "बॉक्सिंग" काम करता है? ] (http://stackoverflow.com/questions/5997398/how-does-boxing-work-in-net) –

+5

वास्तव में नहीं - आपको केवल यह पता होगा कि यदि आप पहले से ही इस प्रश्न का उत्तर जानते हैं तो आप दोनों संबंधित हैं। – mavnn

+1

@ बाइनरी चिंता - यह वही विषय है, लेकिन फिर आपको यह जानने की जरूरत है कि इसे कैसे कहा जाता है .. –

उत्तर

12

इसे "मुक्केबाजी" कहा जाता है: स्वचालित रूप से int को संदर्भ प्रकार में परिवर्तित कर दिया जाता है। यह कुछ प्रदर्शन लागत है।

Boxing and Unboxing भी देखें।

0

Arraylist.Add() कोई भी मूल्य लेता है और एक वस्तु के रूप में जोड़ता है, इसलिए पूर्णांक मान स्वचालित रूप से परिवर्तित हो जाएगा (मुक्केबाजी) और सरणी सूची में जोड़ा जाता है।

2

आप ILSpy में ArrayList वर्ग को ऊपर खींचने के हैं, तो आप देखेंगे कि समर्थन की दुकान है:

private object[] _items; 

और Add विधि प्रकार object का एक उदाहरण स्वीकार करता है कि:

public virtual int Add(object value) { ... } 

तो जब आप एक पूर्णांक के साथ Add पर कॉल करते हैं, तो .NET boxes पूर्णांक और फिर सरणी में ArrayList में object के रूप में जोड़ा जाता है ।

संयोग से, अगर आप सिर्फ पूर्णांकों का एक ArrayList की जरूरत है और आप .NET 2.0 फ्रेमवर्क का प्रयोग करके या बाद में कर रहे हैं, तो आप List<T> (उर्फ सामान्य सूची) वर्ग के बजाय का उपयोग करना चाहिए, क्योंकि यह एक बॉक्स के लिए होने से बचा जाता है जो बेहतर प्रदर्शन करेगा int सूची से इसे संग्रहीत या पुनर्प्राप्त करते समय (उस अंतिम लिंक में प्रदर्शन विचार अनुभाग देखें)।

1

इसे मुक्केबाजी कहा जाता है। एक "बॉक्स" में स्ट्रक्चर की एक प्रति है जिसमें विवरण है कि यह किस प्रकार है।

MSDN:

MSDN: http://msdn.microsoft.com/en-us/library/yz2be5wk%28v=vs.80%29.aspx

ढांचे में 2.0 + माइक्रोसॉफ्ट हमें जेनरिक जो तेजी से और अधिक effictive हैं दे दी है http://msdn.microsoft.com/en-us/library/ms172192.aspx