2011-06-29 19 views
17

मुझे पता है कि शून्य प्रकार के मानने के लिए संभव है जो मान प्रकार को लपेटता है और शून्य को स्टोर करने की क्षमता देता है। लेकिन क्या कोई तकनीकी कारण मूल्य प्रकार को शून्य होने की अनुमति नहीं देता है या कारण केवल वैचारिक है?क्यों मान प्रकार शून्य नहीं हो सकते हैं

उत्तर

33

एक संदर्भ प्रकार किसी ऑब्जेक्ट उदाहरण के लिए एक संदर्भ (एक सूचक की तरह) के रूप में संग्रहीत किया जाता है।
null का अर्थ एक संदर्भ है जो किसी ऑब्जेक्ट के उदाहरण को इंगित नहीं कर रहा है।

वैल्यू प्रकार किसी भी संदर्भ के बिना मूल्यों के रूप में संग्रहीत किए जाते हैं।
इसलिए, null मान प्रकार — मान प्रकार परिभाषा द्वारा मूल्य मानने के लिए यह समझ में नहीं आता है।

Nullable<T>HasValue ध्वज के साथ एक मान प्रकार है जो false हो सकता है यह इंगित करने के लिए कि कोई मूल्य नहीं है। यह अभी भी एक मान है (जब HasValuefalse है, Valuedefault(T) है), लेकिन HasValue ध्वज आपको मूल्य को अनदेखा करने के लिए कहता है।
इसका null के साथ कुछ लेना देना नहीं है, सिवाय इसके कि सीएलआर स्वचालित रूप से nullNullable<T> पर HasValuefalse पर बॉक्स किए गए मानों को अनबॉक्स करता है।

+0

हम चर का उपयोग कर चरणीय बना सकते हैं? ऑपरेटर। उदाहरण के लिए, int? एक्स = शून्य; – Shekhar

+3

@ शेखर: वह उसे महसूस करता है। इसका 'शून्य' से कोई लेना देना नहीं है। स्पष्टीकरण के लिए – SLaks

+0

धन्यवाद। – Shekhar

0

एक मूल्य प्रकार 'Int32' भंडारण के तीस-बिट बिट्स का उपयोग करके संग्रहीत किया जाता है। ठीक 4,294,967,296 मान हैं जिन्हें 32 बिट्स द्वारा दर्शाया जा सकता है, और इंट 32 में 4,294,967,296 अलग-अलग मान हो सकते हैं। यदि -2,147,483,648 मान्य इंट 32 मान नहीं थे, तो इसका उपयोग "शून्य" का प्रतिनिधित्व करने के लिए करना संभव हो सकता है, लेकिन तथ्य यह है कि इसका बाइनरी प्रतिनिधित्व सभी शून्यों को जटिल नहीं करेगा। इसके विपरीत, किसी संदर्भ प्रकार में संभावित बिट संयोजनों की संख्या संभावित मान्य संदर्भों की संख्या से कहीं अधिक है, इसलिए "शून्य" का प्रतिनिधित्व करने के लिए थोड़ा संयोजन आरक्षित करने में कोई कठिनाई नहीं है।

+0

आप जो भी समझा रहे हैं उसके लिए कोई संदर्भ (आलेख)? मैं अभी भी आपके द्वारा रखे गए विचार के बारे में स्पष्ट नहीं हूं। – Marshal