Jaka jest różnica między typami bool i Boolean w C #

338

Jaka jest różnica między booli Booleantypów w C #?

Gary Willoughby
źródło

Odpowiedzi:

382

booljest pseudonimem, System.Booleanpodobnie jak intpseudonim System.Int32. Zobacz pełną listę aliasów tutaj: Tabela typów wbudowanych (C # Reference) .

Kent Boogaart
źródło
5
Z powyższego łącza Microsoft mówi, że słowa kluczowe typu C # i ich aliasy są wymienne. Ale dlaczego potrzebujemy aliasów, Z mojego punktu widzenia Boolean jest bardziej znaczący niż bool, a Int32 jest bardziej znaczący niż int, więc dlaczego aliasy ???
Asim Sajjad
6
@asim: lenistwo? Jest mniej pisania i pozwala uniknąć konieczności importowania systemu. Osobiście wolę pseudonimy. Wpisanie „int” jest znacznie szybsze niż wpisanie „Int32”.
Kent Boogaart
8
@asmin: To sprawa C. int, float itp. są znanymi słowami kluczowymi dla programistów C i C ++, dlatego Microsoft zdecydował się na użycie tych aliasów dla zachowania spójności.
Mike Chamberlain,
42
@Mikey Jestem pewien, że Java zdecydowała się na użycie tych aliasów w celu zachowania spójności, a Microsoft zdecydował się na użycie Java w celu zachowania spójności ... :-)
maksymalnie
19
@MaxWell W Javie booleani Booleanto nie to samo. Jeden jest pierwotnym typem danych, a drugi jest obiektem.
Rosdi Kasim
48

Nie wierzę, że istnieje.

bool jest tylko pseudonimem dla System.Boolean

bhinks
źródło
22

Są jednym w tym samym. bool to tylko alias Boolean.

MagicKat
źródło
15

Zdaję sobie sprawę, że jest to wiele lat później, ale natknąłem się na tę stronę od Google z tym samym pytaniem.

Obecnie na stronie MSDN istnieje niewielka różnica.

VS2005

Uwaga:

Jeśli potrzebujesz zmiennej boolowskiej, która może mieć również wartość null, użyj bool. Aby uzyskać więcej informacji, zobacz Typy dopuszczające wartości zerowe (Podręcznik programowania w języku C #).

VS2010

Uwaga:

Jeśli potrzebujesz zmiennej boolowskiej, która może mieć również wartość null, użyj bool ?. Aby uzyskać więcej informacji, zobacz Typy dopuszczające wartości zerowe (Podręcznik programowania w języku C #).

Ryan Buddicom
źródło
2
Byłem tym zaskoczony - wydaje się, że to błąd w dokumentacji. Najpierw zobaczyłem stronę VS2005 (dla mnie wydaje się wyższa w rankingach Google!) I pomyślałem, że sugeruje, że boolmoże zawierać zero, ale Booleannie może. Mimo że istnieje link ze starszej do nowszej dokumentacji, nie przeczytałem nowszej dokumentacji wystarczająco dokładnie, aby zauważyć pojedynczą ?różnicę.
Logan Pickup
1
Przykro mi, ale to nie tak, że nie można konwertować bool lub Bolean null ponieważ są typy dopuszczające wartość null
Timothy Macharia
13

Oni są tacy sami. Boolean pomaga uprościć konwersję w obie strony między C # i VB.Net. Większość programistów C # woli „bool”, ale jeśli jesteś w sklepie, w którym jest dużo zarówno VB.Net, jak i C #, możesz wybrać Boolean, ponieważ działa w obu miejscach.

Joel Coehoorn
źródło
10

Jak już powiedziano, są takie same. Są dwa, ponieważ bool jest słowem kluczowym C #, a Boolean klasą .Net.

Carra
źródło
Czy nie byłoby lepiej bool dla kompatybilności między platformami?
Sygnał dźwiękowy
9

Jeden to pseudonim dla drugiego.

itsmatt
źródło
5

bool to alias dla klasy Boolean. Używam aliasu, kiedy deklaruję zmienną, i nazwy klasy, gdy wywołujemy metodę w klasie.

James Boother
źródło
8
Zainteresowanie - dlaczego miałbyś używać obu? Opowiadam się za jednym lub drugim. Użyj aliasów lub nie, w przeciwnym razie kod wygląda na niechlujny i niespójny.
Kent Boogaart,
2
Myślę, że wygląda bałagan, gdy nie używasz obu. Użyj aliasu do zadeklarowania typu danych i użyj nazwy klasy aktuall podczas uzyskiwania dostępu do metod statycznych: string x = String.Format („Today is: {0}”, DateTime.Now);
Scott Dorman,
1
Więc zrobiłbyś: int i = Int32.Parse (...); ? Mam z tym kilka problemów. Po pierwsze, VS domyślnie podświetli się inaczej (wiem, że możesz to zmienić, ale większość programistów po prostu używa domyślnego podświetlania składni). Po drugie, wyszukiwanie jest trudniejsze, szczególnie w przypadku longów (long / Int64).
Kent Boogaart
4
Tak, dokładnie tak należy to zrobić. int nie jest nazwą klasy, nie powinieneś na niej wywoływać metod. Z drugiej strony jest to typ wbudowany i definiujący Int32 i; jest zbyt gadatliwy i nienaturalny.
AviD,
5
mieszanie aliasów i nazw klas nie dodaje nic do przejrzystości kodu. Wybierz jeden i trzymaj się go, imho
Arne Claassen
2

Są takie same, Bool jest po prostu Systemem. Boolean został skrócony. Użyj Boolean, gdy pracujesz z programistą VB.net, ponieważ działa on zarówno z C #, jak i Vb

Prime_Aqasix
źródło
1

Zauważ, że Booleanzadziała tylko wtedy, gdy masz using System;(co zwykle jest, ale niekoniecznie, uwzględnione) (chyba że wypiszesz to jako System.Boolean). boolnie potrzebujeusing System;

James Curran
źródło
0

bool jest typem pierwotnym, co oznacza, że ​​wartość (w tym przypadku prawda / fałsz) jest przechowywana bezpośrednio w zmiennej. Boolean to obiekt. Zmienna typu Boolean przechowuje odwołanie do obiektu Boolean. Jedyną prawdziwą różnicą jest przechowywanie. Obiekt zawsze zajmuje więcej pamięci niż typ pierwotny, ale w rzeczywistości zmiana wszystkich wartości logicznych na bool nie będzie miała zauważalnego wpływu na użycie pamięci.

Myliłem się; tak to działa w Javie z logicznymi i logicznymi. W języku C #, bool i Boolean są typami referencyjnymi. Oba przechowują swoją wartość bezpośrednio w zmiennej, oba nie mogą mieć wartości NULL i oba wymagają metody „convertTO” do przechowywania swoich wartości w innym typie (np. Int). Liczy się tylko to, którego używasz, jeśli chcesz wywołać funkcję statyczną zdefiniowaną w klasie Boolean.

Nate
źródło
booli Booleannie są to dwa różne typy, ten jeden typ nie jest typem referencyjnym, możesz wywołać metodę statyczną na tym jednym typie, używając dowolnego identyfikatora, i tak naprawdę nie musisz wywoływać ConvertTometody, aby przekonwertować ją na inny typ.
Servy
2
To nieprawda, że ​​„ booli Booleanoba są typami referencyjnymi”. Słowa booli Booleanoba odnoszą się do tego samego typu, a ten typ jest typem wartości, a nie typem referencyjnym.
Tanner Swett
Dzięki, próbowałem sprawdzić, czy C # działał tak samo jak java w tym polu. Odpowiedź jest jedyną, która porównuje ją do java (chociaż może nie jest to celowe). :)
bvdb
-1

bool to alias Boolean. Aliasy zastępują jeden ciąg tekstu innym (np. Wyszukaj / zamień wszystko w Notatniku ++), tuż przed skompilowaniem kodu. Używanie jednego nad drugim nie ma wpływu w czasie wykonywania.

W większości innych języków jeden byłby typem pierwotnym, a drugi typem obiektu (typ wartości i typ odwołania w żargonie C #). C # nie daje możliwości wyboru między tymi dwoma. Kiedy chcesz wywołać metodę statyczną zdefiniowaną w klasie Boolean, automatycznie traktuje Boolean jako typ odwołania. Jeśli utworzysz nową zmienną logiczną, automatycznie traktuje ją jako typ odwołania (chyba że użyjesz metody Activator.CreateInstance).

Michael Kaldwid
źródło
Boolean jest typem wartości, a nie typem odniesienia.
Servy
-2

Być może bool jest odrobinę „lżejszy” niż Boolean; Co ciekawe, zmieniając to:

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

...do tego:

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

... spowodowało, że mój plik cs wyrósł „przy użyciu systemu;” Zmiana typu z powrotem na „bool” spowodowała, że ​​włosy klauzuli używającej stały się siwe.

(Visual Studio 2010, projekt WebAPI)

B. Clay Shannon
źródło
To System.Booleanraczej niż tylko Boolean. using System;Pokazywał, bo to pozwoliło Booleanbyć prawidłowo interpretowane jako System.Boolean. Nie tak naprawdę lżejsze niż tylko mniej gadatliwe.
Nat