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


Odpowiedzi:


382

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


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




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 #).


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.


10

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


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


5

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


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


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;


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.


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).


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)


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.