C # में डिफ़ॉल्ट बूलियन मान क्या है?


82

एक बूलियन ( bool) शून्य नहीं हो सकता। तथा:

bool foo; if(foo){} // Use of unassigned local variable 'foo'

डिफ़ॉल्ट मान गलत क्यों नहीं है? तो क्या मूल्य है अगर यह शून्य नहीं है? क्या कारण है?

संपादित करें 1 - डिफ़ॉल्ट मान वास्तव में गलत है - लेकिन सभी चर को आरंभीकृत किया जाना चाहिए, क्यों? यह एक और प्रश्न के लिए है;)

संपादित करें 2 - रिचार्पर के साथ: private bool foo = false; // Initializing field by default value is redundant???


1
आपको शायद ब्लॉग्स .msdn.com
— b

जवाबों:


101

http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx

याद रखें कि C # में uninitialized चर का उपयोग करने की अनुमति नहीं है।

साथ में

bool foo = new bool();

foo का डिफ़ॉल्ट मान होगा।

बूलियन डिफ़ॉल्ट गलत है


1
क्षमा करें, जोड़ा गया: याद रखें कि C # में अनइंस्टॉल किए गए चर का उपयोग करने की अनुमति नहीं है। जैसा कि जुड़े हुए लेख में देखा गया है
— विनाशकारी

1
धन्यवाद! और इसलिए आप मेरे "एडिट 2" की व्याख्या कैसे कर सकते हैं :)
— जॉनजॉना

1
यदि डिफॉल्ट कंस्ट्रक्टर कहा जाता है, तो डिफ़ॉल्ट मान सेट किया जाएगा। आपने एक मान के साथ एक नया चर शुरू किया। "int i" एक ही एरर देगा- अनसाइनड लोकल वैरिएबल का-। मूल्य को प्रारंभिक बनाने पर सेट करें या डिफ़ॉल्ट निर्माता को कॉल करें। तो आपको कोई समस्या नहीं होगी :)
— विध्वंसक

1
@Destructor मुझे लगता है कि आपकी टिप्पणी थोड़ी भ्रामक है। इसका कारण यह बताया जा रहा है कि ओपी को बूलियन फ़ील्ड को इनिशियलाइज़ करने की आवश्यकता नहीं है, क्योंकि क्लास में फ़ील्ड्स को स्वचालित रूप से उनके डिफ़ॉल्ट मान असाइन किए जाते हैं, जो कि स्थानीय चर नहीं हैं। नीचे हसन से जवाब देखें ।
— एलेक्स

26

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

केवल निम्न चर स्वचालित रूप से उनके डिफ़ॉल्ट मानों से आरंभिक होते हैं:

  • स्थैतिक चर
  • वर्ग और संरचना उदाहरणों के उदाहरण चर
  • तत्वों को सरणी

डिफ़ॉल्ट मान इस प्रकार हैं (एक वर्ग के डिफ़ॉल्ट निर्माता में निर्दिष्ट):

  • संदर्भ प्रकार के एक चर का डिफ़ॉल्ट मान शून्य है।
  • पूर्णांक प्रकारों के लिए, डिफ़ॉल्ट मान 0 है
  • चार के लिए, डिफ़ॉल्ट मान `\ u0000 'है
  • फ्लोट के लिए, डिफ़ॉल्ट मान 0.0f है
  • डबल के लिए, डिफ़ॉल्ट मान 0.0d है
  • दशमलव के लिए, डिफ़ॉल्ट मान 0.0m है
  • बूल के लिए, डिफ़ॉल्ट मान गलत है
  • एक एनुम प्रकार के लिए, डिफ़ॉल्ट मान 0 है
  • एक संरचनात्मक प्रकार के लिए, सभी मान प्रकारों को उनके डिफ़ॉल्ट मानों पर सेट करके डिफ़ॉल्ट मान प्राप्त किया जाता है

जहां तक ​​आपके प्रश्न के बाद के भागों की बात है:

  • सभी चर जो डिफ़ॉल्ट मानों के लिए स्वचालित रूप से आरंभीकृत नहीं होने चाहिए, इसका कारण कंपाइलर द्वारा लगाया गया प्रतिबंध है।
  • प्राइवेट बूल foo = false; यह वास्तव में बेमानी है क्योंकि यह एक वर्ग का एक उदाहरण चर है। इसलिए यह डिफॉल्ट कंस्ट्रक्टर में झूठे को इनिशियलाइज़ किया जाएगा। इसलिए अपने आप को झूठे करने के लिए इसे स्थापित करने की आवश्यकता नहीं है।

4
पूर्णता के लिए, MSDN में डिफ़ॉल्ट मान तालिका में कहा गया है कि संरचना प्रकारों के लिए डिफ़ॉल्ट मानों में "सभी संदर्भ-प्रकार फ़ील्ड को शून्य करने के लिए" सेटिंग भी शामिल है।
— कार्ल वॉल्श

10

डिफ़ॉल्ट मान वास्तव में गलत है।

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

आप सत्यापित करने के लिए डिफ़ॉल्ट कीवर्ड का उपयोग कर सकते हैं:

bool foo = default(bool);
if (!foo) { Console.WriteLine("Default is false"); }

4

बूल के लिए डिफ़ॉल्ट मान है false। डिफ़ॉल्ट मानों पर एक महान संदर्भ के लिए इस तालिका को देखें । एकमात्र कारण यह झूठ नहीं होगा जब आप इसे जांचते हैं यदि आप इसे शुरू करते हैं / इसे सच करते हैं।


0

इसे आज़माएं (डिफ़ॉल्ट कीवर्ड का उपयोग करके)

 bool foo = default(bool); if (foo) { } 

0

इसे संकलक से रक्षात्मक प्रोग्रामिंग दृष्टिकोण के रूप में माना जा सकता है - इसका उपयोग करने से पहले चर को सौंपा जाना चाहिए।

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