null
पर कई अर्थ हैं।
प्रोग्रामिंग भाषाओं में से एक जो पॉइंटर-आधारित तरीके में चर और स्मृति प्रस्तुत करता है (जिसमें सी # के संदर्भ शामिल हैं हालांकि यह कुछ विवरण छुपाता है) "यह कुछ भी इंगित नहीं करता है"।
दूसरा "इसका कोई सार्थक मूल्य नहीं है"।
संदर्भ प्रकारों के साथ, हम अक्सर बाद वाले का प्रतिनिधित्व करने के लिए पूर्व का उपयोग करते हैं। हम string label = null
का उपयोग "कोई सार्थक लेबल नहीं कर सकते हैं। यह अभी भी भी स्मृति में कहां है और इसके बारे में क्या इंगित कर रहा है, इस मामले में क्या हो रहा है, इस मामले में क्या हो रहा है। फिर भी, यह बहुत उपयोगी है, हम कितना शर्मिंदा हैं सी # में int
और DateTime
के साथ ऐसा नहीं कर सकता है 1.1
क्या Nullable<T>
प्रदान करता है यही कारण है, एक साधन कहते हैं "कोई सार्थक मूल्य", लेकिन यह नीचे के स्तर पर उसी तरह एक null
स्ट्रिंग है में null
नहीं है (जब तक बॉक्स किया गया)। इसे शून्य कहा गया है और शून्य के बराबर है इसलिए यह कुछ अन्य अर्थशास्त्र के अनुसार तार्किक रूप से शून्य और शून्य है, लेकिन यह संदर्भ और मूल्य प्रकारों के बीच कार्यान्वयन अंतर "कुछ भी इंगित नहीं करता है" में शून्य नहीं है।
यह संदर्भ-प्रकार नल के केवल "कुछ भी इंगित नहीं करता" पहलू है जो आपको उस पर उदाहरण विधियों को कॉल करने से रोकता है।
और वास्तव में, यहां तक कि यह सख्ती से सच नहीं है। आईएल चलो आप एक संक्षिप्त संदर्भ पर उदाहरण विधियों को कॉल करते हैं और जब तक यह किसी भी क्षेत्र से बातचीत नहीं करता है, यह काम करेगा। अगर यह जरूरत है यह काम कर सकते हैं नहीं (प्रत्यक्ष या परोक्ष) उन क्षेत्रों के बाद से वे एक अशक्त refernce पर मौजूद नहीं हैं, लेकिन यह null.FineWithNull()
कह सकते हैं कि अगर विधि के रूप में परिभाषित किया गया था: सी # के साथ यह निर्णय लिया गया
int FineWithNull()
{
//note that we don't actually do anything relating to the state of this object.
return 43;
}
इसे अस्वीकार करने के लिए, लेकिन यह सभी .NET के लिए नियम नहीं है (मुझे लगता है कि एफ # इसे अनुमति देता है, लेकिन मुझे यकीन नहीं है, मुझे पता है कि अप्रबंधित सी ++ ने इसे अनुमति दी है और यह कुछ दुर्लभ मामलों में उपयोगी था)।
स्रोत
2011-12-20 23:57:05
शून्य प्रकार के साथ एक बहुत ही भयानक विशेष मामला गोचाचा है। रनटाइम स्वचालित रूप से मुक्केबाजी करते समय उनके आंतरिक मूल्य को कम कर देगा। इसका मतलब है कि "((ऑब्जेक्ट) x) .सवैल्यू" एक NullReferenceException फेंक देगा। यह खराब है। –
@ केनेट बेलेन्की वास्तव में '((ऑब्जेक्ट) x) .सवैल्यू संकलित नहीं होगा, क्योंकि ऑब्जेक्ट पर कोई HasValue प्रॉपर्टी नहीं है। मुझे लगता है कि आप यह कहना चाहते थे कि '((ऑब्जेक्ट) x)। ToString()' (या '.GetHashCode()' या 'Equals (कुछ) ') फेंक देगा। – phoog
@phoog, ओह, मैं अपने विवरण में थोड़ा जल्दी था। आप सही हैं, मेरा विवरण वाक्य रचनात्मक रूप से अमान्य है। बिंदु यह है कि, हालांकि, जिस क्षण आपने किसी ऑब्जेक्ट को एक नालीबल डाला था, यह अब एक नामुमकिन नहीं है। नेट फ्रेमवर्क में कोई अन्य प्रकार उस संपत्ति में नहीं है। –