Was ist der Unterschied zwischen Bool- und Booleschen Typen in C #?

338

Was ist der Unterschied zwischen boolund BooleanTypen in C #?

Gary Willoughby
quelle

Antworten:

382

boolist ein Alias ​​für System.Booleangenauso wie intein Alias ​​für System.Int32. Eine vollständige Liste der Aliase finden Sie hier: Tabelle der integrierten Typen (C # -Referenz) .

Kent Boogaart
quelle
5
Aus dem obigen Link sagt Microsoft, dass die Schlüsselwörter vom Typ C # und ihre Aliase austauschbar sind. Aber warum brauchen wir Aliase? Aus meiner Sicht ist Boolean aussagekräftiger als Bool und Int32 ist aussagekräftiger als Int. Warum dann Aliase?
Asim Sajjad
6
@asim: Faulheit? Es ist weniger tippend und vermeidet die Notwendigkeit, System zu importieren. Ich persönlich bevorzuge die Aliase. Die Eingabe von "int" ist viel schneller als die Eingabe von "Int32".
Kent Boogaart
8
@asmin: Es ist eine C-Sache. int, float usw. sind vertraute Schlüsselwörter für C- und C ++ - Programmierer, daher hat Microsoft beschlossen, diese Aliase aus Gründen der Konsistenz zu verwenden.
Mike Chamberlain
42
@ Mikey Ich bin mir ziemlich sicher, dass Java diese Aliase aus Gründen der Konsistenz verwendet hat, und Microsoft hat sich aus Gründen der Konsistenz für Java entschieden ... :-)
max
19
@ MaxWell In Java booleanund Booleanist nicht das gleiche. Einer ist ein primitiver Datentyp und der andere ist ein Objekt.
Rosdi Kasim
48

Ich glaube nicht, dass es einen gibt.

bool ist nur ein Alias ​​für System.Boolean

bhinks
quelle
22

Sie sind ein und dasselbe. bool ist nur ein Alias ​​für Boolean.

MagicKat
quelle
15

Mir ist klar, dass dies viele Jahre später ist, aber ich bin mit der gleichen Frage auf diese Seite von Google gestoßen.

Auf der MSDN-Seite gibt es ab sofort einen kleinen Unterschied.

VS2005

Hinweis:

Wenn Sie eine boolesche Variable benötigen, die auch den Wert null haben kann, verwenden Sie bool. Weitere Informationen finden Sie unter Nullable Types (C # -Programmierhandbuch).

VS2010

Hinweis:

Wenn Sie eine boolesche Variable benötigen, die auch den Wert null haben kann, verwenden Sie bool?. Weitere Informationen finden Sie unter Nullable Types (C # -Programmierhandbuch).

Ryan Buddicom
quelle
2
Das hat mich gestolpert - es scheint ein Fehler in der Dokumentation zu sein. Ich habe zuerst die VS2005-Seite gesehen (sie erscheint für mich in Google-Rankings höher!) Und dachte, dies würde bedeuten, dass boolsie null enthalten könnte, aber Booleannicht. Obwohl es einen Link von der älteren zur neueren Dokumentation gibt, habe ich die neuere Dokumentation nicht gründlich genug gelesen, um den einzigen ?Unterschied zu bemerken .
Logan Pickup
1
Es tut mir leid, aber das ist falsch, Sie können Bool oder Bolean nicht in Null konvertieren, da es sich um nullbare Typen handelt
Timothy Macharia
13

Sie sind gleich. Boolean vereinfacht das Hin- und Herkonvertieren zwischen C # und VB.Net. Die meisten C # -Programmierer bevorzugen 'bool', aber wenn Sie in einem Geschäft sind, in dem es sowohl VB.Net als auch C # gibt, bevorzugen Sie möglicherweise Boolean, da es an beiden Orten funktioniert.

Joel Coehoorn
quelle
10

Wie gesagt, sie sind die gleichen. Es gibt zwei, da bool ein C # -Schlüsselwort und Boolean eine .Net-Klasse ist.

Carra
quelle
Wäre Bool nicht besser für die plattformübergreifende Kompatibilität?
Beep Beep
9

Einer ist ein Alias ​​für den anderen.

itsmatt
quelle
5

bool ist ein Alias ​​für die Boolesche Klasse. Ich verwende den Alias ​​beim Deklarieren einer Variablen und den Klassennamen beim Aufrufen einer Methode für die Klasse.

James Boother
quelle
8
Aus Interesse - warum sollten Sie beide verwenden? Ich befürworte die Verwendung des einen oder anderen. Verwenden Sie entweder die Aliase oder nicht, sonst sieht der Code chaotisch und inkonsistent aus.
Kent Boogaart
2
Ich denke, es sieht chaotisch aus, wenn Sie nicht beide verwenden. Verwenden Sie den Alias ​​zum Deklarieren des Datentyps und den tatsächlichen Klassennamen, wenn Sie auf statische Methoden zugreifen: string x = String.Format ("Today is: {0}", DateTime.Now);
Scott Dorman
1
Also würden Sie tun: int i = Int32.Parse (...); ? Ich habe ein paar Probleme damit. Erstens wird VS standardmäßig anders hervorgehoben (ich weiß, dass Sie dies ändern können, aber die meisten Entwickler verwenden nur die Standard-Syntaxhervorhebung). Zweitens ist die Suche besonders bei Longs (Long / Int64) schwieriger.
Kent Boogaart
4
Ja, genau so sollte es gemacht werden. int ist nicht der Klassenname, Sie sollten keine Methoden dafür aufrufen. Andererseits ist es der eingebaute Typ, der Int32 i definiert. ist zu ausführlich und nicht natürlich.
AviD
5
Das Mischen von Aliasen und Klassennamen trägt nur nicht zur Klarheit des Codes bei. Wählen Sie eine und bleiben Sie dabei, imho
Arne Claassen
2

Sie sind die gleichen, Bool ist nur System.Boolean verkürzt. Verwenden Sie Boolean, wenn Sie mit einem VB.net-Programmierer arbeiten, da dieser sowohl mit C # als auch mit Vb funktioniert

Prime_Aqasix
quelle
1

Beachten Sie, dass dies Booleannur funktioniert using System;, wenn Sie es haben (was normalerweise, aber nicht unbedingt enthalten ist) (es sei denn, Sie schreiben es als System.Boolean). boolbraucht nichtusing System;

James Curran
quelle
0

bool ist ein primitiver Typ, dh der Wert (in diesem Fall true / false) wird direkt in der Variablen gespeichert. Boolean ist ein Objekt. Eine Variable vom Typ Boolean speichert einen Verweis auf ein Boolesches Objekt. Der einzige wirkliche Unterschied ist die Lagerung. Ein Objekt belegt immer mehr Speicher als ein primitiver Typ, aber in Wirklichkeit hat das Ändern aller Ihrer Booleschen Werte in Bool keine spürbaren Auswirkungen auf die Speichernutzung.

Ich lag falsch; So funktioniert es in Java mit Boolean und Boolean. In C # sind Bool und Boolean beide Referenztypen. Beide speichern ihren Wert direkt in der Variablen, beide dürfen nicht null sein, und beide benötigen eine "convertTO" -Methode, um ihre Werte in einem anderen Typ (z. B. int) zu speichern. Es ist nur wichtig, welche Sie verwenden, wenn Sie eine statische Funktion aufrufen müssen, die in der Booleschen Klasse definiert ist.

Nate
quelle
boolund Booleansind nicht zwei verschiedene Typen, dass ein Typ kein Referenztyp ist, können Sie eine statische Methode für diesen einen Typ unter Verwendung eines der beiden Bezeichner aufrufen, und Sie müssen tatsächlich keine ConvertToMethode aufrufen , um sie in einen anderen Typ zu konvertieren.
Servy
2
Es ist nicht richtig, dass " boolund Booleanbeide Referenztypen sind". Die Wörter boolund Booleanbeide beziehen sich auf denselben Typ, und dieser Typ ist ein Werttyp, kein Referenztyp.
Tanner Swett
Vielen Dank, ich habe versucht zu überprüfen, ob C # in diesem Feld genauso funktioniert wie Java. Ihre Antwort ist die einzige, die sie mit Java vergleicht (auch wenn dies möglicherweise nicht absichtlich der Fall ist). :)
bvdb
-1

bool ist ein Alias ​​für Boolean. Aliase ersetzen eine Textzeichenfolge durch eine andere (wie Search / Replace-All in Notepad ++), kurz bevor der Code kompiliert wird. Die Verwendung übereinander hat zur Laufzeit keine Auswirkung.

In den meisten anderen Sprachen wäre eine ein primitiver Typ und die andere ein Objekttyp (Werttyp und Referenztyp im C # -Jargon). C # bietet Ihnen nicht die Möglichkeit, zwischen beiden zu wählen. Wenn Sie eine statische Methode aufrufen möchten, die in der Booleschen Klasse definiert ist, wird Boolescher Wert automatisch als Referenztyp behandelt. Wenn Sie eine neue boolesche Variable erstellen, wird sie automatisch als Referenztyp behandelt (es sei denn, Sie verwenden die Activator.CreateInstance-Methode).

Michael Kaldwid
quelle
Boolean ist ein Werttyp, kein Referenztyp.
Servy
-2

Vielleicht ist Bool ein bisschen "leichter" als Boolean; Interessanterweise ändert dies:

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

... dazu:

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

... hat dazu geführt, dass aus meiner CS-Datei ein "using System" hervorgegangen ist. Wenn Sie den Typ wieder auf "bool" ändern, werden die Haare der using-Klausel grau.

(Visual Studio 2010, WebAPI-Projekt)

B. Clay Shannon
quelle
Es ist System.Booleaneher als nur Boolean. Das using System;wurde angezeigt, weil es Booleanrichtig interpretiert werden durfte als System.Boolean. Nicht wirklich leichter als nur weniger ausführlich.
Nat