Quelle est la différence entre les types booléens et booléens en C #

338

Quelle est la différence entre boolet Booleantypes en C #?

Gary Willoughby
la source

Réponses:

382

boolest un alias pour System.Booleantout comme intun alias pour System.Int32. Consultez la liste complète des alias ici: Table des types intégrés (référence C #) .

Kent Boogaart
la source
5
D'après le lien ci-dessus, Microsoft dit que les mots-clés de type C # et leurs alias sont interchangeables Mais pourquoi nous avons besoin d'alias, de mon point de vue, le booléen est plus significatif que bool et Int32 est plus significatif qu'int alors pourquoi les alias ???
Asim Sajjad
6
@asim: la paresse? C'est moins de frappe et évite d'avoir à importer System. Personnellement, je préfère les alias. Taper "int" est beaucoup plus rapide que taper "Int32".
Kent Boogaart
8
@asmin: C'est une chose C. int, float etc. sont des mots clés familiers aux programmeurs C et C ++, donc Microsoft a décidé d'utiliser ces alias pour plus de cohérence.
Mike Chamberlain
42
@Mikey Je suis presque sûr que Java a décidé d'utiliser ces alias pour la cohérence, et Microsoft a décidé d'utiliser Java pour la cohérence ... :-)
max
19
@MaxWell En Java, booleanet ce Booleann'est pas la même chose. L'un est un type de données primitif et l'autre est un objet.
Rosdi Kasim
48

Je ne pense pas qu'il y en ait un.

bool est juste un alias pour System.Boolean

bhinks
la source
22

Ils sont l'un dans le même. bool n'est qu'un alias pour Boolean.

MagicKat
la source
15

Je me rends compte que c'est plusieurs années plus tard, mais je suis tombé sur cette page de Google avec la même question.

Il y a une différence mineure sur la page MSDN à partir de maintenant.

VS2005

Remarque:

Si vous avez besoin d'une variable booléenne qui peut également avoir une valeur nulle, utilisez bool. Pour plus d'informations, consultez Types nullables (Guide de programmation C #).

VS2010

Remarque:

Si vous avez besoin d'une variable booléenne qui peut également avoir une valeur nulle, utilisez bool ?. Pour plus d'informations, consultez Types nullables (Guide de programmation C #).

Ryan Buddicom
la source
2
J'ai été trébuché par cela - cela semble être un bug dans la documentation. J'ai vu la page VS2005 en premier (elle apparaît plus élevée dans le classement Google pour moi!), Et j'ai pensé qu'elle impliquait que cela boolpourrait contenir null, mais Booleanpas. Même s'il existe un lien entre l'ancienne et la nouvelle documentation, je n'ai pas suffisamment lu la nouvelle documentation pour remarquer la seule ?différence.
Ramassage Logan
1
Je suis désolé mais c'est faux, vous ne pouvez pas convertir bool ou Bolean en null car ce sont des types
nullables
13

Ce sont les mêmes. Boolean permet de simplifier la conversion entre C # et VB.Net. La plupart des programmeurs C # ont tendance à préférer `` booléen '', mais si vous êtes dans un magasin où il y a beaucoup de VB.Net et de C #, vous préférerez peut-être Boolean car il fonctionne aux deux endroits.

Joel Coehoorn
la source
10

Comme cela a été dit, ce sont les mêmes. Il y en a deux car bool est un mot clé C # et Boolean une classe .Net.

Carra
la source
Alors, bool ne serait-il pas meilleur pour la compatibilité multiplateforme?
Bip bip
9

L'un est un alias pour l'autre.

itsmatt
la source
5

bool est un alias pour la classe booléenne. J'utilise l'alias lors de la déclaration d'une variable et le nom de la classe lors de l'appel d'une méthode sur la classe.

James Boother
la source
8
Par intérêt - pourquoi utiliseriez-vous les deux? Je préconise d'utiliser l'un ou l'autre. Utilisez les alias ou non, sinon le code semble désordonné et incohérent.
Kent Boogaart, le
2
Je pense que cela semble désordonné lorsque vous n'utilisez pas les deux. Utilisez l'alias pour déclarer le type de données et utilisez le nom de la classe actuall lors de l'accès aux méthodes statiques: string x = String.Format ("Today is: {0}", DateTime.Now);
Scott Dorman,
1
Vous feriez donc: int i = Int32.Parse (...); ? J'ai quelques problèmes avec ça. Tout d'abord, VS mettra en évidence différemment par défaut (je sais que vous pouvez changer cela, mais la plupart des développeurs utilisent simplement la coloration syntaxique par défaut). Deuxièmement, la recherche est plus difficile, en particulier avec les longs (long / Int64).
Kent Boogaart, le
4
Oui, c'est exactement la façon dont cela devrait être fait. int n'est pas le nom de la classe, vous ne devez pas y appeler de méthodes. D'un autre côté, c'est le type intégré, et définissant Int32 i; est trop verbeux et pas naturel.
AviD
5
le mélange des alias et des noms de classe n'ajoute rien à la clarté du code. Choisissez-en un et respectez-le, à mon humble avis
Arne Claassen
2

Ce sont les mêmes, Bool n'est que System.Boolean raccourci. Utilisez Boolean lorsque vous êtes avec un programmeur VB.net, car il fonctionne avec C # et Vb

Prime_Aqasix
la source
1

Notez que Booleancela ne fonctionnera que si vous en avez using System;(qui est généralement, mais pas nécessairement, inclus) (sauf si vous l'écrivez comme System.Boolean). booln'a pas besoinusing System;

James Curran
la source
0

bool est un type primitif, ce qui signifie que la valeur (vrai / faux dans ce cas) est stockée directement dans la variable. Boolean est un objet. Une variable de type booléen stocke une référence à un objet booléen. La seule vraie différence est le stockage. Un objet prendra toujours plus de mémoire qu'un type primitif, mais en réalité, changer toutes vos valeurs booléennes en booléen n'aura pas d'impact notable sur l'utilisation de la mémoire.

J'avais tort; c'est comme ça que ça marche en java avec booléen et booléen. En C #, bool et booléen sont les deux types de référence. Les deux d'entre eux stockent leur valeur directement dans la variable, les deux ne peuvent pas être nuls, et les deux nécessitent une méthode "convertTO" pour stocker leurs valeurs dans un autre type (tel que int). Peu importe celle que vous utilisez si vous avez besoin d'appeler une fonction statique définie dans la classe booléenne.

Nate
la source
boolet Booleanne sont pas deux types différents, qu'un type est pas un type de référence, vous pouvez appeler une méthode statique que l' un de type en utilisant soit identifiant, et vous n'avez pas besoin de fait d'appeler une ConvertTométhode pour le convertir en un autre type.
Servy
2
Ce n'est pas correct que " boolet Booleansont les deux types de référence". Les mots boolet les Booleandeux font référence au même type, et ce type est un type de valeur, pas un type de référence.
Tanner Swett
Merci, j'essayais de vérifier si C # agissait de la même manière que java dans ce domaine. Vous répondez est le seul qui le compare à java (même si peut-être pas intentionnellement). :)
bvdb
-1

bool est un alias pour Boolean. Les alias remplacent une chaîne de texte par une autre (comme search / replace-all dans notepad ++), juste avant la compilation du code. L'utilisation de l'un sur l'autre n'a aucun effet au moment de l'exécution.

Dans la plupart des autres langages, l'un serait un type primitif et l'autre serait un type d'objet (type valeur et type référence dans le jargon C #). C # ne vous donne pas la possibilité de choisir entre les deux. Lorsque vous souhaitez appeler une méthode statique définie dans la classe booléenne, elle traite automatiquement comme booléen un type de référence. Si vous créez une nouvelle variable booléenne, elle la traite automatiquement comme un type de référence (sauf si vous utilisez la méthode Activator.CreateInstance).

Michael Kaldwid
la source
Boolean est un type de valeur, pas un type de référence.
Servy
-2

Peut-être que bool est un peu "plus léger" que booléen; Fait intéressant, changer cela:

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

...pour ça:

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

... a fait germer mon fichier cs en "utilisant le système;" La modification du type en "bool" a fait griser les cheveux de la clause using.

(Visual Studio 2010, projet WebAPI)

Clay Shannon
la source
C'est System.Booleanplutôt que juste Boolean. Le using System;se présentait parce qu'il permettait Booleand'être correctement interprété comme System.Boolean. Pas vraiment plus léger, mais moins bavard.
Nat