C # में बूल और बुलियन प्रकार के बीच क्या अंतर है


जवाबों:


382

boolके लिए एक उपनाम के System.Booleanरूप intमें बस के लिए एक उपनाम है System.Int32। यहाँ उपनामों की एक पूरी सूची देखें: बिल्ट-इन टाइप्स टेबल (C # संदर्भ)


5
उपरोक्त लिंक से microsoft का कहना है कि C # टाइप कीवर्ड और उनके उपनाम परस्पर विनिमय करने योग्य हैं लेकिन हमें उपनाम की आवश्यकता क्यों है, मेरे दृष्टिकोण से बूलियन अधिक सार्थक है और फिर बूल और Int32 अधिक सार्थक है तो int फिर क्यों एलियास ???
असीम सज्जाद

6
@ कासिम: आलस्य? यह कम टाइपिंग है और सिस्टम को आयात करने की आवश्यकता से बचा जाता है। व्यक्तिगत रूप से, मैं उपनाम पसंद करता हूं। टाइपिंग "int" टाइप करने की तुलना में बहुत तेज है "Int32"।
केंट बोगार्ट

8
@asmin: यह एक सी बात है। int, float आदि C और C ++ प्रोग्रामर के लिए परिचित कीवर्ड हैं, इसलिए Microsoft ने स्थिरता के लिए इन उपनामों का उपयोग करने का निर्णय लिया।
माइक चैंबरलेन

42
@ मायके मुझे पूरा यकीन है कि जावा ने स्थिरता के लिए इन उपनामों का उपयोग करने का फैसला किया था, और माइक्रोसॉफ्ट ने जावा को स्थिरता के लिए उपयोग करने का फैसला किया ... :-)
अधिकतम

19
@MaxWell जावा में, booleanऔर Booleanएक ही बात नहीं है। एक एक आदिम डेटा प्रकार है और दूसरा एक वस्तु है।
रोजडी कासिम

48

मुझे विश्वास नहीं होता कि कोई एक है।

bool के लिए सिर्फ एक उपनाम है System.Boolean


22

वे सभी एक से ही हैं। बूल बूलियन के लिए सिर्फ एक उपनाम है।



15

मुझे लगता है कि यह कई साल बाद है लेकिन मैं एक ही सवाल के साथ गूगल से इस पेज पर ठोकर खाई।

MSDN पृष्ठ पर अभी तक के रूप में एक मामूली अंतर है।

VS2005

ध्यान दें:

यदि आपको एक बूलियन चर की आवश्यकता होती है, जिसमें अशक्त का मान भी हो सकता है, तो बूल का उपयोग करें। अधिक जानकारी के लिए, अशक्त प्रकार (C # प्रोग्रामिंग गाइड) देखें।

VS2010

ध्यान दें:

यदि आपको एक बूलियन चर की आवश्यकता होती है जिसमें शून्य का मान भी हो सकता है, तो बूल का उपयोग करें। अधिक जानकारी के लिए, अशक्त प्रकार (C # प्रोग्रामिंग गाइड) देखें।


2
मुझे इस बात से उलझाया गया - यह दस्तावेज में एक बग लगता है। मैंने पहले VS2005 पृष्ठ को देखा (यह मेरे लिए Google रैंकिंग में उच्चतर प्रतीत होता है!), और सोचा कि यह निहित है boolजिसमें अशक्त हो सकता है, लेकिन Booleanनहीं कर सकता। हालाँकि नए दस्तावेज़ में पुराने से एक लिंक है, फिर भी मैंने नए ?अंतर को एक ही अंतर को नोटिस करने के लिए पर्याप्त रूप से नहीं पढ़ा ।
लोगन पिकअप

1
क्षमा करें, लेकिन यह गलत है, आप बूल या बोलियन को अशक्त में परिवर्तित नहीं कर सकते क्योंकि वे अशक्त प्रकार के हैं
टिमोथी मचैरिया

13

वह एक जैसे है। बूलियन C # और VB.Net के बीच आगे और पीछे रूपांतरण को सरल बनाने में मदद करता है। अधिकांश C # प्रोग्रामर 'बूल' को पसंद करते हैं, लेकिन अगर आप किसी ऐसी दुकान में हैं जहाँ VB.Net और C # दोनों की बहुत अधिक संख्या है, तो आप बूलियन को पसंद कर सकते हैं क्योंकि यह दोनों स्थानों पर काम करता है।


10

जैसा कहा गया है, वे वैसे ही हैं। दो हैं क्योंकि बूल एक सी # कीवर्ड है और बूलियन एक। नेट क्लास है।


तो क्रॉस-प्लेटफॉर्म संगतता के लिए बूल बेहतर नहीं होगा?
बीप बीप


5

बूल बुलियन वर्ग के लिए एक उपनाम है। कक्षा पर एक विधि को कॉल करते समय एक चर और वर्ग नाम की घोषणा करते समय मैं उपनाम का उपयोग करता हूं।


8
ब्याज से बाहर - आप दोनों का उपयोग क्यों करेंगे? मैं एक या दूसरे का उपयोग करने की वकालत करता हूं। या तो उपनाम का उपयोग करें या नहीं, अन्यथा कोड गन्दा और असंगत दिखता है।
कैंट बूगार्ट

2
मुझे लगता है कि यह गड़बड़ है जब आप दोनों का उपयोग नहीं करते हैं। डेटाटाइप को घोषित करने के लिए उपनाम का उपयोग करें और स्थिर तरीकों का उपयोग करते समय एक्टुआल क्लास नाम का उपयोग करें: स्ट्रिंग x = स्ट्रिंग।फॉर्म ("आज है: {0}", DateTime.Now);
स्कॉट डोरमैन

1
तो आप ऐसा करेंगे: int i = Int32.Parse (...); ? मुझे इसके साथ कुछ समस्याएं हैं। सबसे पहले, वीएस डिफ़ॉल्ट रूप से अलग-अलग हाइलाइट करेगा (मुझे पता है कि आप इसे बदल सकते हैं लेकिन अधिकांश देवता केवल डिफ़ॉल्ट सिंटैक्स हाइलाइटिंग का उपयोग करते हैं)। दूसरे, खोज विशेष रूप से लॉन्ग (लंबे / Int64) के साथ कठिन है।
कैंट बूगार्ट

4
हाँ, यह वही तरीका है जो इसे किया जाना चाहिए। int क्लास का नाम नहीं है, आपको इस पर तरीके नहीं बताने चाहिए। दूसरी ओर, यह बिल्टिन प्रकार है, और Int32 को परिभाषित करता है; बहुत क्रियात्मक है और प्राकृतिक नहीं है।
अवध

5
मिश्रण उपनाम और वर्ग के नाम कोड स्पष्टता के लिए कुछ भी नहीं जोड़ता है। एक को उठाओ और इसके साथ रहो, imho
Arne Claassen

2

वे वही हैं, बूल सिर्फ सिस्टम है। बूलियन छोटा। जब आप VB.net प्रोग्रामर के साथ हों तो बूलियन का उपयोग करें, क्योंकि यह C # और Vb दोनों के साथ काम करता है


1

ध्यान दें कि Booleanकेवल वही काम होगा using System;जो आपके पास है (जो आमतौर पर है, लेकिन जरूरी नहीं कि, शामिल हो) (जब तक आप इसे बाहर नहीं लिखते System.Boolean)। boolजरूरत नही हैusing System;


0

बूल एक आदिम प्रकार है, जिसका अर्थ है कि मूल्य (इस मामले में सच / गलत) सीधे चर में संग्रहीत किया जाता है। बुलियन एक वस्तु है। बुलियन प्रकार का एक चर एक बूलियन ऑब्जेक्ट के लिए एक संदर्भ संग्रहीत करता है। केवल वास्तविक अंतर भंडारण है। एक वस्तु हमेशा एक आदिम प्रकार की तुलना में अधिक मेमोरी लेगी, लेकिन वास्तव में, आपके बूलियन मूल्यों को बूल में बदलने से स्मृति उपयोग पर कोई ध्यान देने योग्य प्रभाव नहीं होगा।

मैं गलत था; यह कैसे बूलियन और बूलियन के साथ जावा में काम करता है। C # में, बूल और बूलियन दोनों संदर्भ प्रकार हैं। दोनों अपने मूल्य को सीधे चर में संग्रहीत करते हैं, दोनों ही अशक्त नहीं हो सकते हैं, और दोनों को अपने मूल्यों को दूसरे प्रकार में संग्रहीत करने के लिए "कन्वर्टो" विधि की आवश्यकता होती है (जैसे इंट)। यह केवल वही मायने रखता है जो आप उपयोग करते हैं यदि आपको बूलियन वर्ग के भीतर परिभाषित एक स्थिर फ़ंक्शन को कॉल करने की आवश्यकता है।


boolऔर Booleanदो अलग-अलग प्रकार नहीं हैं, कि एक प्रकार एक संदर्भ प्रकार नहीं है, आप पहचानकर्ता का उपयोग करके उस एक प्रकार पर एक स्थिर विधि को कॉल कर सकते हैं , और आपको ConvertToइसे किसी अन्य प्रकार में परिवर्तित करने के लिए एक विधि को कॉल करने की आवश्यकता नहीं है ।
17

2
यह सही नहीं है कि " boolऔर Booleanदोनों संदर्भ प्रकार हैं"। शब्द boolऔर Booleanदोनों एक ही प्रकार को संदर्भित करते हैं, और यह प्रकार एक मान प्रकार है, न कि संदर्भ प्रकार।
टेनर स्वेट

धन्यवाद, मैं यह जांचने की कोशिश कर रहा था कि क्या सी # ने इस क्षेत्र में जावा के समान काम किया है। आप जवाब केवल एक ही है कि इसकी तुलना जावा से करते हैं (भले ही जानबूझकर नहीं)। :)
bvdb

-1

बूल बूलियन के लिए एक उपनाम है। उपनाम क्या करते हैं, पाठ के एक तार को दूसरे के साथ बदल दिया जाता है (जैसे खोज / प्रतिस्थापित-सभी नोटपैड ++ में), कोड संकलित होने से ठीक पहले। रन-टाइम पर एक दूसरे का उपयोग करने से कोई प्रभाव नहीं पड़ता है।

अधिकांश अन्य भाषाओं में, एक एक आदिम प्रकार होगा और दूसरा एक वस्तु प्रकार (मूल्य प्रकार और संदर्भ प्रकार सी # गुड़गांव में) होगा। C # आपको दोनों के बीच चयन करने का विकल्प नहीं देता है। जब आप बुलियन क्लास में परिभाषित एक स्थिर विधि को कॉल करना चाहते हैं, तो यह ऑटो-जादुई रूप से बुलियन को एक संदर्भ प्रकार के रूप में मानता है। यदि आप एक नया बूलियन वैरिएबल बनाते हैं, तो यह ऑटो-जादुई रूप से इसे संदर्भ प्रकार के रूप में मानता है (जब तक कि आप Activator.CreateInstance विधि का उपयोग नहीं करते हैं)।


बूलियन एक मूल्य प्रकार है, न कि संदर्भ प्रकार।
सर्व

-2

शायद बूलियन की तुलना में बूल एक बालक "हल्का" है; दिलचस्प है, इसे बदलना:

namespace DuckbillServerWebAPI.Models
{
    public class Expense
    {
        . . .
        public bool CanUseOnItems { get; set; }
    }
}

...इसके लिए:

namespace DuckbillServerWebAPI.Models
{
    public class Expense
    {
        . . .
        public Boolean CanUseOnItems { get; set; }
    }
}

... मेरी सीएस फाइल के कारण "सिस्टम का उपयोग करते हुए अंकुरित" हुआ। "बूल" में वापस प्रकार बदलने से क्लॉज़ के बाल ग्रे हो जाते हैं।

(विजुअल स्टूडियो 2010, वेबएपीआई प्रोजेक्ट)


यह System.Booleanसिर्फ के बजाय है Boolean। यह using System;दिखा रहा था क्योंकि इसे Booleanठीक से व्याख्या करने की अनुमति थी System.Boolean। वास्तव में इतना हल्का नहीं जितना कि सिर्फ कम क्रिया।
नेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.