2013-03-08 10 views
19

मैं इस तरह एक सरणी का दृष्टांत:किसी सरणी में किसी सदस्य का डिफ़ॉल्ट मान क्या है?

int array[] = new int[4]; 

क्या उन चार सदस्यों के लिए डिफ़ॉल्ट मान रहे हैं? क्या यह शून्य है, 0 या मौजूद नहीं है?

+3

जब आपने कोशिश की तो क्या हुआ? – jrummell

+6

'डिफ़ॉल्ट (int)', या 'डिफ़ॉल्ट (टी)' जहां 'टी' सरणी द्वारा निहित आइटम का प्रकार है। –

+1

इस प्रश्न पर विश्वास नहीं कर सकता है कि पहले भी कुछ भी नहीं मिला है। –

उत्तर

37

यह 0 है। यह शून्य नहीं हो सकता है, क्योंकि शून्य मान्य int मान नहीं है।

सी # 5 विनिर्देश की धारा 7.6.10.4 से:

नई सरणी उदाहरण के सभी तत्वों को उनके डिफ़ॉल्ट मानों के प्रारंभ कर रहे हैं (§5.2)।

और खंड 5.2 से:

एक चर का डिफ़ॉल्ट मान चर के प्रकार पर निर्भर करता है और इस प्रकार निर्धारित किया जाता है:

  • एक मूल्य प्रकार के एक चर के लिए , डिफ़ॉल्ट मान मान-प्रकार के डिफ़ॉल्ट कन्स्ट्रक्टर (§4.1.2) द्वारा गणना मान के समान होता है।
  • संदर्भ-प्रकार के चर के लिए, डिफ़ॉल्ट मान शून्य है।

डिफ़ॉल्ट मानों के लिए प्रारंभ आमतौर पर मेमोरी मैनेजर या कचरा कलेक्टर द्वारा उपयोग के लिए आवंटित किए जाने से पहले सभी बिट्स-शून्य को स्मृति प्रारंभ करने के द्वारा किया जाता है। इस कारण से, शून्य संदर्भ का प्रतिनिधित्व करने के लिए सभी बिट्स-शून्य का उपयोग करना सुविधाजनक है।

(एक कार्यान्वयन विस्तार के रूप में, पहले बुलेट बिंदु के आसपास कुछ trickiness है। हालांकि सी # में ही आप मूल्य प्रकारों के लिए एक parameterless निर्माता घोषित करने के लिए अनुमति नहीं है, आप मूल्य प्रकार के लिए अपने स्वयं के parameterless कंस्ट्रक्टर्स बना सकते हैं । आईएल में मेरा मानना ​​है कि नहीं उन कंस्ट्रक्टर्स सरणी प्रारंभ में कहा जाता है, लेकिन वे सी # में एक new X() अभिव्यक्ति में कहा जा होगा यह सी # कल्पना के दायरे हालांकि बाहर, वास्तव में है)

+1

जब मैंने इस पृष्ठ को लोड किया, तो उसने कहा "1 मिनट पहले पूछा", "59 सेकंड पहले उत्तर दिया"। सबूत है कि जॉन स्कीट वास्तव में एक बॉट है? ;) –

+1

@ टिमगुडमैन: समय-टिकटों को देखते हुए, मुझे लगता है कि मैंने जवाब दिया था (प्रारंभ में, संक्षिप्त संस्करण के साथ) प्रश्न पूछने के 49 सेकंड बाद। सुधार के लिए अभी भी कमरा। –

+0

@ जोन्स स्केट आपको उस आलोचकों का जवाब नहीं देना चाहिए। यह हास्यास्पद है (लेकिन मजाकिया), और एक तरह से यह एक प्रशंसा है .. – Lucio

4

Arrays (C# Programming Guide) से।।:

संख्यात्मक सरणी तत्वों का डिफ़ॉल्ट मान शून्य पर सेट किया गया है, और संदर्भ तत्व शून्य पर सेट हैं।

0

इंटीग्रर्स NULL नहीं हो सकते हैं। उनके पास मूल्य '0' होगा। भले ही आप कोड से NULL को int पर असाइन करने का प्रयास करें, आप इसे करने में सक्षम नहीं होंगे।

+0

सी # में 'NULL' जैसी कोई चीज़ नहीं है। –

9

T जैसे स्वचालित रूप से प्रारंभिक चर का डिफ़ॉल्ट मान, जैसे सरणी तत्व या उदाहरण फ़ील्ड, default(T) के मान के समान है। संदर्भ प्रकार और सूचक प्रकार के लिए, यह शून्य है। संख्यात्मक प्रकारों के लिए, यह उस प्रकार का शून्य है। बूल के लिए, यह झूठा है। संरचना प्रकारों के लिए, यह संरचना मान है जिसमें इसके सभी फ़ील्ड अपने डिफ़ॉल्ट मानों में प्रारंभ हुए हैं।

+0

ब्याज से, सी # टीम ने कभी भी अन्य भाषाओं में लिखे गए structs के बारे में स्पष्ट रूप से विचार या देखभाल की है जिसमें "गैर-डिफ़ॉल्ट" पैरामीटर रहित कन्स्ट्रक्टर हैं? –

+0

@ जोन्स स्केट: यह वास्तव में कभी नहीं आया, नहीं। –

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