Qual é a diferença entre os tipos booleano e booleano em C #

338

Qual é a diferença entre boole Booleantipos em C #?

Gary Willoughby
fonte

Respostas:

382

boolé um alias para System.Booleanassim como inté um alias para System.Int32. Veja uma lista completa de aliases aqui: Tabela de tipos internos (referência de C #) .

Kent Boogaart
fonte
5
No link acima, a microsoft diz que as palavras-chave do tipo C # e seus alias são intercambiáveis ​​Mas por que precisamos de aliases? Do meu ponto de vista Booleano é mais significativo que bool e Int32 é mais significativo que int então porque aliases ???
Asim Sajjad
6
@asim: preguiça? É menos digitado e evita a necessidade de importar o sistema. Pessoalmente, prefiro os pseudônimos. Digitar "int" é muito mais rápido que digitar "Int32".
Kent Boogaart
8
@asmin: é uma coisa de C. int, float etc são palavras-chave familiares para programadores de C e C ++, então a Microsoft decidiu usar esses aliases para obter consistência.
Mike Chamberlain
42
@Mikey eu tenho certeza que Java decidiu usar esses aliases para a consistência e Microsoft decidiu usar Java para a consistência ... :-)
max
19
@ MaxWell Em Java, booleane Booleannão é a mesma coisa. Um é um tipo de dados primitivo e o outro é um objeto.
Rosdi Kasim
48

Não acredito que exista.

bool é apenas um apelido para System.Boolean

bhinks
fonte
22

Eles são um no mesmo. bool é apenas um apelido para booleano.

MagicKat
fonte
15

Sei que muitos anos depois, mas encontrei esta página do google com a mesma pergunta.

Há uma pequena diferença na página do MSDN a partir de agora.

VS2005

Nota:

Se você precisar de uma variável booleana que também possa ter um valor nulo, use bool. Para obter mais informações, consulte Tipos anuláveis ​​(Guia de programação em C #).

VS2010

Nota:

Se você precisar de uma variável booleana que também possa ter um valor nulo, use bool? Para obter mais informações, consulte Tipos anuláveis ​​(Guia de programação em C #).

Ryan Buddicom
fonte
2
Fui enganado por isso - parece haver um erro na documentação. Vi a página do VS2005 primeiro (ela aparece mais alta no ranking do Google para mim!) E achei implícita que boolpoderia conter nulo, mas Booleannão podia. Embora exista um link da documentação mais antiga para a mais recente, não li a documentação mais recente o suficiente para notar a ?diferença única .
Logan Pickup
11
Lamento, mas o que está errado, você não pode converter bool ou Bolean como nulo porque são tipos anuláveis
Timothy Macharia
13

Eles são os mesmos. Booleano ajuda a simplificar a conversão entre C # e VB.Net. A maioria dos programadores de C # costuma preferir 'bool', mas se você estiver em uma loja onde há muitos VB.Net e C #, poderá preferir Boolean porque funciona em ambos os lugares.

Joel Coehoorn
fonte
10

Como já foi dito, eles são os mesmos. Existem dois porque bool é uma palavra-chave C # e booleana uma classe .Net.

Carra
fonte
Portanto, o bool não seria melhor para compatibilidade entre plataformas?
Beep beep
9

Um é um alias para o outro.

itsmatt
fonte
5

bool é um alias para a classe booleana. Eu uso o alias ao declarar uma variável e o nome da classe ao chamar um método na classe.

James Boother
fonte
8
Fora de interesse - por que você usaria os dois? Defendo o uso de um ou de outro. Use os aliases ou não, caso contrário, o código parece confuso e inconsistente.
Kent Boogaart 25/09/08
2
Eu acho que parece confuso quando você não usa os dois. Use o alias para declarar o tipo de dados e use o nome da classe atual ao acessar métodos estáticos: string x = String.Format ("Today is: {0}", DateTime.Now);
Scott Dorman
11
Então você faria: int i = Int32.Parse (...); ? Eu tenho alguns problemas com isso. Em primeiro lugar, o VS destacará de maneira diferente por padrão (eu sei que você pode mudar isso, mas a maioria dos desenvolvedores usa apenas o destaque de sintaxe padrão). Em segundo lugar, a pesquisa é mais difícil, especialmente com longs (long / Int64).
Kent Boogaart 25/09/08
4
Sim, é exatamente assim que deve ser feito. int não é o nome da classe, você não deve chamar métodos nela. Por outro lado, é o tipo interno e define Int32 i; é muito detalhado e não natural.
AviD 25/09/08
5
misturar aliases e nomes de classes simplesmente não acrescenta nada à clareza do código. Escolha uma e ficar com ela, imho
Arne Claassen
2

Eles são os mesmos, Bool é apenas System.Boolean reduzido. Use Boolean quando estiver com um programador VB.net, pois ele funciona com C # e Vb

Prime_Aqasix
fonte
1

Observe que Booleansó funcionará se você tiver using System;(o que geralmente é, mas não necessariamente, incluído) (a menos que você o escreva como System.Boolean). boolnão precisausing System;

James Curran
fonte
0

bool é um tipo primitivo, significando que o valor (verdadeiro / falso neste caso) é armazenado diretamente na variável Booleano é um objeto. Uma variável do tipo Booleano armazena uma referência a um objeto Booleano. A única diferença real é o armazenamento. Um objeto sempre ocupa mais memória que um tipo primitivo, mas, na realidade, alterar todos os seus valores booleanos para bool não terá nenhum impacto perceptível no uso da memória.

Eu estava errado; é assim que funciona em java com booleano e booleano. Em C #, bool e Boolean são os dois tipos de referência. Ambos armazenam seu valor diretamente na variável, não podem ser nulos e exigem um método "convertTO" para armazenar seus valores em outro tipo (como int). É importante qual você usar se precisar chamar uma função estática definida na classe booleana.

Nate
fonte
boole Booleannão são dois tipos diferentes, que um tipo não é um tipo de referência, você pode chamar um método estático em que um tipo usando um identificador, e você não necessitam fato de chamar um ConvertTométodo para convertê-lo para outro tipo.
Servy
2
Não está correto que " boole Booleansão os dois tipos de referência". As palavras boole Booleanambas se referem ao mesmo tipo, e esse tipo é um tipo de valor, não um tipo de referência.
quer
Obrigado, eu estava tentando verificar se o C # agia da mesma forma que o java nesse campo. Você responde que é o único que o compara ao java (embora talvez não intencionalmente). :)
bvdb
-1

bool é um alias para booleano. O que os apelidos fazem é substituir uma sequência de texto por outra (como pesquisar / substituir tudo no bloco de notas ++), pouco antes do código ser compilado. Usar um sobre o outro não tem efeito no tempo de execução.

Na maioria dos outros idiomas, um seria um tipo primitivo e o outro seria um tipo de objeto (tipo de valor e tipo de referência no jargão C #). O C # não oferece a opção de escolher entre os dois. Quando você deseja chamar um método estático definido na classe Boolean, ele trata automaticamente o Boolean como um tipo de referência. Se você criar uma nova variável booleana, ela a tratará automaticamente como um tipo de referência (a menos que você use o método Activator.CreateInstance).

Michael Kaldwid
fonte
Booleano é um tipo de valor, não um tipo de referência.
Servy 5/08/16
-2

Talvez bool seja um pouco "mais leve" que booleano; Curiosamente, alterando isso:

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

...para isso:

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

... fez meu arquivo cs gerar um "using System;" Alterar o tipo de volta para "bool" fez com que o cabelo da cláusula use ficasse cinza.

(Visual Studio 2010, projeto WebAPI)

B. Clay Shannon
fonte
É ao System.Booleaninvés de apenas Boolean. O using System;estava aparecendo porque permitiu Booleana ser devidamente interpretada como System.Boolean. Não é realmente mais leve, mas apenas menos detalhado.
Nat