क्या अशक्त प्रकार संदर्भ प्रकार हैं?


135

जब मैं एक intअशक्त घोषित करता हूं

int? i=null;

क्या iयहाँ एक संदर्भ प्रकार बनता है?

जवाबों:


136

नहीं, एक अशक्त एक संरचना है। क्या हो रहा है कि अशक्त संरचना के दो मूल्य हैं:

  1. डेटा प्रकार का मान (के intलिए int?, के DateTimeलिए DateTime?, आदि)।
  2. एक बूलियन मान जो बताता है कि क्या डेटा प्रकार मान सेट किया गया है। ( HasValueसंपत्ति है।)

जब आप डेटा प्रकार का मान सेट करते हैं, तो संरचना HasValueसही में बदल जाती है।

अशक्त प्रकार (C # प्रोग्रामिंग गाइड)


26

से Nullable प्रकार (सी # प्रोग्रामिंग गाइड) :

अशक्त प्रकार System.Nullable संरचना के उदाहरण हैं।

तथा

अशक्त प्रकार मूल्य-प्रकार के चर का प्रतिनिधित्व करते हैं जिन्हें नल के मूल्य को सौंपा जा सकता है। आप संदर्भ प्रकार के आधार पर एक अशक्त प्रकार नहीं बना सकते। (संदर्भ प्रकार पहले से ही शून्य मान का समर्थन करते हैं।)

तो, नहीं, वे संदर्भ प्रकार नहीं हैं।


14

अशक्त प्रकार न तो मूल्य प्रकार हैं और न ही संदर्भ प्रकार। वे मूल्य प्रकारों की तरह अधिक हैं, लेकिन संदर्भ प्रकारों के कुछ गुण हैं।

स्वाभाविक रूप से, अशक्त प्रकारों के लिए सेट किया जा सकता है null। इसके अलावा, एक अशक्त प्रकार एक सामान्य structबाधा को संतुष्ट नहीं कर सकता है । इसके अलावा, जब आप एक अशक्त प्रकार को HasValueसमान के साथ बॉक्स करते हैं, तो आपको एक बॉक्स वाले अशक्त प्रकार के बजाय falseएक nullसूचक मिलता है (एक समान स्थिति अनबॉक्सिंग के साथ मौजूद है)।

ये गुण अशक्त प्रकारों को गैर-मूल्य प्रकार बनाते हैं, लेकिन वे निश्चित रूप से संदर्भ प्रकार नहीं हैं। वे अपने स्वयं के विशेष अशक्त-मूल्य प्रकार हैं।


6

नहीं, अशक्त प्रकार वास्तव में एक संरचना है। रनटाइम समझदारी से आपके लिए एक शून्य मान की सेटिंग को हैंडल करेगा, एक संदर्भ प्रकार की उपस्थिति देगा, जब यह नहीं है ...।


2
मैं 'समझदारी से संभाल' क्वेरी करूँगा, बल्कि व्यक्तिपरक। व्यक्तिगत रूप से मुझे व्यवहार गड़बड़ लगता है और अक्सर गुस्सा आता है।
निकोडेमस


0

आपको एक संदर्भ प्रकार को एक अशक्त प्रकार बनाने की आवश्यकता नहीं है क्योंकि आप इसके स्थान पर नल पास कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.