¿Cuál es la diferencia entre los tipos bool y booleano en C #?

338

¿Cuál es la diferencia entre booly los Booleantipos en C #?

Gary Willoughby
fuente

Respuestas:

382

booles un alias para System.Booleanigual que intes un alias para System.Int32. Vea una lista completa de alias aquí: Tabla de tipos incorporados (Referencia de C #) .

Kent Boogaart
fuente
55
Desde el enlace anterior, Microsoft dice que las palabras clave de tipo C # y sus alias son intercambiables. Pero, ¿por qué necesitamos alias?
Asim Sajjad
66
@asim: ¿pereza? Es menos tipeante y evita la necesidad de importar el sistema. Personalmente, prefiero los alias. Escribir "int" es mucho más rápido que escribir "Int32".
Kent Boogaart
8
@asmin: Es una cosa de C. int, float, etc. son palabras clave familiares para los programadores de C y C ++, por lo que Microsoft decidió usar estos alias para mantener la coherencia.
Mike Chamberlain
42
@Mikey Estoy bastante seguro de que Java decidió utilizar estos alias para la consistencia y Microsoft decidió utilizar Java para la consistencia ... :-)
max
19
@MaxWell En Java, booleany Booleanno es lo mismo. Uno es un tipo de datos primitivo y el otro es un objeto.
Rosdi Kasim
48

No creo que haya uno.

bool es solo un alias para System.Boolean

bhinks
fuente
22

Ellos son uno en lo mismo. bool es solo un alias para booleano.

MagicKat
fuente
15

Me doy cuenta de que esto es muchos años después, pero me encontré con esta página de Google con la misma pregunta.

Hay una pequeña diferencia en la página de MSDN a partir de ahora.

VS2005

Nota:

Si necesita una variable booleana que también puede tener un valor nulo, use bool. Para obtener más información, consulte Tipos anulables (Guía de programación de C #).

VS2010

Nota:

Si necesita una variable booleana que también puede tener un valor nulo, use bool ?. Para obtener más información, consulte Tipos anulables (Guía de programación de C #).

Ryan Buddicom
fuente
2
Me tropecé con esto, parece ser un error en la documentación. Primero vi la página VS2005 (¡parece que es más alta en las clasificaciones de Google para mí!), Y pensé que implicaba que boolpodía contener nulo, pero Booleanno podía. Aunque hay un enlace de la documentación más antigua a la más reciente, no leí la documentación más nueva lo suficiente como para notar la única ?diferencia.
Recogida de Logan
1
Lo siento, pero eso está mal, no puedes convertir bool o Bolean a nulo porque son tipos anulables
Timothy Macharia
13

Ellos son iguales. Boolean ayuda a simplificar la conversión de ida y vuelta entre C # y VB.Net. La mayoría de los programadores de C # tienden a preferir 'bool', pero si está en una tienda donde hay muchos VB.Net y C #, entonces puede preferir Boolean porque funciona en ambos lugares.

Joel Coehoorn
fuente
10

Como se ha dicho, son lo mismo. Hay dos porque bool es una palabra clave de C # y Boolean una clase .Net.

Carra
fuente
Entonces, ¿no sería mejor bool para la compatibilidad multiplataforma?
Beep beep
9

Uno es un alias para el otro.

itsmatt
fuente
5

bool es un alias para la clase booleana. Utilizo el alias cuando declaro una variable y el nombre de la clase cuando llamo a un método en la clase.

James Boother
fuente
8
Fuera de interés: ¿por qué usarías ambos? Abogo por usar uno u otro. Utilice los alias o no, de lo contrario el código se ve desordenado e inconsistente.
Kent Boogaart el
2
Creo que se ve desordenado cuando no usas ambos. Use el alias para declarar el tipo de datos y use el nombre de clase actuall al acceder a métodos estáticos: string x = String.Format ("Hoy es: {0}", DateTime.Now);
Scott Dorman
1
Entonces harías: int i = Int32.Parse (...); ? Tengo un par de problemas con eso. En primer lugar, VS resaltará de manera diferente de manera predeterminada (sé que puede cambiar esto, pero la mayoría de los desarrolladores solo usan el resaltado de sintaxis predeterminado). En segundo lugar, la búsqueda es más difícil, especialmente con longs (long / Int64).
Kent Boogaart
44
Sí, esa es la forma exacta en que se debe hacer. int no es el nombre de la clase, no debería llamar a métodos en él. Por otro lado, es el tipo integrado y define Int32 i; es demasiado detallado y no natural.
AviD
55
mezclar alias y nombres de clase simplemente no agrega nada a la claridad del código. Elegir uno y aferrarse a él, en mi humilde opinión
Arne Claassen
2

Son lo mismo, Bool es solo System.Boolean acortado. Use Boolean cuando esté con un programador de VB.net, ya que funciona con C # y Vb

Prime_Aqasix
fuente
1

Tenga en cuenta que Booleansolo funcionará si lo tiene using System;(que generalmente se incluye, pero no necesariamente) (a menos que lo escriba como System.Boolean). boolno necesitausing System;

James Curran
fuente
0

bool es un tipo primitivo, lo que significa que el valor (verdadero / falso en este caso) se almacena directamente en la variable. Boolean es un objeto. Una variable de tipo booleano almacena una referencia a un objeto booleano. La única diferencia real es el almacenamiento. Un objeto siempre ocupará más memoria que un tipo primitivo, pero en realidad, cambiar todos los valores booleanos a bool no tendrá un impacto notable en el uso de la memoria.

Estaba equivocado; así es como funciona en java con boolean y boolean. En C #, bool y Boolean son ambos tipos de referencia. Ambos almacenan su valor directamente en la variable, ambos no pueden ser nulos y ambos requieren un método "convertTO" para almacenar sus valores en otro tipo (como int). Solo importa cuál use si necesita llamar a una función estática definida dentro de la clase booleana.

Nate
fuente
booly Booleanno son dos tipos diferentes, que un tipo no es un tipo de referencia, puede llamar a un método estático en el que un tipo usando identificador, y no lo hace, de hecho, necesidad de llamar a un ConvertTométodo para convertirlo en otro tipo.
Servy
2
No es correcto eso " booly Booleanson ambos tipos de referencia". Las palabras booly Booleanambas se refieren al mismo tipo, y ese tipo es un tipo de valor, no un tipo de referencia.
Tanner Swett
Gracias, estaba tratando de verificar si C # actuó igual que Java en este campo. Su respuesta es la única que lo compara con Java (aunque tal vez no intencionalmente). :)
bvdb
-1

bool es un alias para booleano. Lo que hacen los alias es reemplazar una cadena de texto con otra (como buscar / reemplazar todo en el bloc de notas ++), justo antes de compilar el código. El uso de uno sobre el otro no tiene ningún efecto en tiempo de ejecución.

En la mayoría de los otros lenguajes, uno sería un tipo primitivo y el otro sería un tipo de objeto (tipo de valor y tipo de referencia en la jerga de C #). C # no le da la opción de elegir entre los dos. Cuando desea llamar a un método estático definido en la clase booleana, trata automáticamente el booleano como un tipo de referencia. Si crea una nueva variable booleana, la trata automáticamente como un tipo de referencia (a menos que utilice el método Activator.CreateInstance).

Michael Kaldwid
fuente
Boolean es un tipo de valor, no un tipo de referencia.
Servicio
-2

Quizás bool es un poco "más ligero" que booleano; Curiosamente, cambiando esto:

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

...a esto:

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

... causó que mi archivo cs brotara "usando el Sistema"; Cambiar el tipo de nuevo a "bool" causó que el cabello de la cláusula de uso se volviera gris.

(Visual Studio 2010, proyecto WebAPI)

B. Clay Shannon
fuente
Es System.Booleanmás que simplemente Boolean. El using System;estaba apareciendo porque permitía Booleanser interpretado correctamente como System.Boolean. No es realmente más ligero sino menos detallado.
Nat