Apa perbedaan antara tipe bool dan Boolean dalam C #

338

Apa perbedaan antara booldan Booleanjenis dalam C #?

Gary Willoughby
sumber

Jawaban:

382

booladalah alias untuk System.Booleanseperti halnya intalias untuk System.Int32. Lihat daftar lengkap alias di sini: Tabel Jenis Bawaan (Referensi C #) .

Kent Boogaart
sumber
5
Dari tautan di atas, microsoft mengatakan kata kunci tipe C # dan aliasnya dapat dipertukarkan. Tapi mengapa kita perlu Alias, Dari sudut pandang saya, Boolean lebih bermakna daripada bool dan Int32 lebih bermakna daripada int lalu mengapa alias alias ???
Asim Sajjad
6
@asim: kemalasan? Ini kurang mengetik dan menghindari kebutuhan untuk mengimpor Sistem. Secara pribadi, saya lebih suka alias. Mengetik "int" jauh lebih cepat daripada mengetik "Int32".
Kent Boogaart
8
@ asmin: Ini hal C. int, float, dll adalah kata kunci yang umum bagi pemrogram C dan C ++, jadi Microsoft memutuskan untuk menggunakan alias ini untuk konsistensi.
Mike Chamberlain
42
@ Mikey Saya cukup yakin bahwa Java memutuskan untuk menggunakan alias ini untuk konsistensi, dan Microsoft memutuskan untuk menggunakan Java untuk konsistensi ... :-)
maks
19
@ MaxWell Di Jawa, booleandan Booleanbukan hal yang sama. Satu adalah tipe data primitif dan yang lainnya adalah objek.
Rosdi Kasim
48

Saya tidak percaya ada satu.

bool hanyalah alias untuk System.Boolean

bhinks
sumber
22

Mereka satu dalam persamaan. bool hanyalah alias untuk Boolean.

MagicKat
sumber
15

Saya menyadari ini bertahun-tahun kemudian tetapi saya menemukan halaman ini dari google dengan pertanyaan yang sama.

Ada satu perbedaan kecil pada halaman MSDN seperti yang sekarang.

VS2005

catatan:

Jika Anda memerlukan variabel Boolean yang juga bisa memiliki nilai nol, gunakan bool. Untuk informasi lebih lanjut, lihat Jenis Nullable (Panduan Pemrograman C #).

VS2010

catatan:

Jika Anda memerlukan variabel Boolean yang juga dapat memiliki nilai nol, gunakan bool ?. Untuk informasi lebih lanjut, lihat Jenis Nullable (Panduan Pemrograman C #).

Ryan Buddicom
sumber
2
Saya tersandung oleh ini - sepertinya ada bug dalam dokumentasi. Saya melihat halaman VS2005 pertama (nampak lebih tinggi di peringkat Google untuk saya!), Dan saya pikir itu menyiratkan yang boolbisa berisi nol, tetapi Booleantidak bisa. Meskipun ada tautan dari yang lebih lama ke dokumentasi yang lebih baru, saya tidak membaca dokumentasi yang lebih baru secara menyeluruh untuk melihat ?perbedaan tunggal .
Logan Pickup
1
Maaf, tetapi itu salah, Anda tidak dapat mengonversi bool atau Bolean menjadi nol karena itu adalah jenis yang dapat
dibatalkan
13

Mereka sama. Boolean membantu menyederhanakan konversi bolak-balik antara C # dan VB.Net. Kebanyakan programmer C # cenderung memilih 'bool', tetapi jika Anda berada di toko di mana ada banyak VB.Net dan C # maka Anda mungkin lebih suka Boolean karena ia bekerja di kedua tempat.

Joel Coehoorn
sumber
10

Seperti yang telah dikatakan, mereka sama. Ada dua karena bool adalah kata kunci C # dan Boolean adalah kelas .Net.

Carra
sumber
Jadi bukankah bool lebih baik untuk kompatibilitas lintas platform?
Bip bip
9

Satu adalah alias untuk yang lain.

itsmatt
sumber
5

bool adalah alias untuk kelas Boolean. Saya menggunakan alias saat mendeklarasikan variabel dan nama kelas saat memanggil metode di kelas.

James Boother
sumber
8
Karena minat - mengapa Anda menggunakan keduanya? Saya menganjurkan menggunakan satu atau yang lain. Baik menggunakan alias atau tidak, jika tidak kode ini terlihat berantakan dan tidak konsisten.
Kent Boogaart
2
Saya pikir itu terlihat berantakan ketika Anda tidak menggunakan keduanya. Gunakan alias untuk mendeklarasikan datatype dan gunakan nama kelas actuall ketika mengakses metode statis: string x = String.Format ("Today is: {0}", DateTime.Now);
Scott Dorman
1
Jadi, Anda akan melakukan: int i = Int32.Parse (...); ? Saya punya beberapa masalah dengan itu. Pertama, VS akan menyorot berbeda secara default (saya tahu Anda dapat mengubah ini tetapi kebanyakan devs hanya menggunakan penyorotan sintaksis default). Kedua, pencarian lebih sulit terutama dengan long (long / Int64).
Kent Boogaart
4
Ya, itulah cara yang seharusnya dilakukan. int bukan nama kelas, Anda seharusnya tidak memanggil metode di atasnya. Di sisi lain, itu adalah tipe builtin, dan mendefinisikan Int32 i; terlalu bertele-tele dan tidak alami.
AviD
5
menggabungkan alias dan nama kelas tidak akan menambah kejelasan kode. Pilih satu dan tetap dengan itu, imho
Arne Claassen
2

Mereka sama, Bool hanyalah System.Boolean disingkat. Gunakan Boolean ketika Anda bersama seorang programmer VB.net, karena ia bekerja dengan C # dan Vb

Prime_Aqasix
sumber
1

Perhatikan bahwa Booleanhanya akan berfungsi jika Anda memiliki using System;(yang biasanya, tetapi tidak harus, termasuk) (kecuali jika Anda menuliskannya sebagai System.Boolean). booltidak perluusing System;

James Curran
sumber
0

bool adalah tipe primitif, artinya nilai (true / false dalam kasus ini) disimpan langsung dalam variabel. Boolean adalah sebuah objek. Variabel tipe Boolean menyimpan referensi ke objek Boolean. Satu-satunya perbedaan nyata adalah penyimpanan. Objek akan selalu mengambil lebih banyak memori daripada tipe primitif, tetapi dalam kenyataannya, mengubah semua nilai Boolean Anda menjadi bool tidak akan memiliki dampak nyata pada penggunaan memori.

Saya salah; begitulah cara kerjanya di java dengan boolean dan Boolean. Dalam C #, bool dan Boolean keduanya jenis referensi. Keduanya menyimpan nilai mereka secara langsung dalam variabel, keduanya tidak boleh nol, dan keduanya membutuhkan metode "convertTO" untuk menyimpan nilai-nilai mereka di tipe lain (seperti int). Itu hanya masalah yang mana yang Anda gunakan jika Anda perlu memanggil fungsi statis yang didefinisikan dalam kelas Boolean.

Nate
sumber
booldan Booleanbukan dua tipe yang berbeda, bahwa satu tipe bukan tipe referensi, Anda dapat memanggil metode statis pada satu tipe itu menggunakan pengenal, dan Anda sebenarnya tidak perlu memanggil ConvertTometode untuk mengubahnya ke tipe lain.
Servy
2
Itu tidak benar bahwa " booldan Booleankeduanya tipe referensi". Kata-kata booldan Booleankeduanya merujuk pada tipe yang sama, dan tipe itu adalah tipe nilai, bukan tipe referensi.
Tanner Swett
Terima kasih, saya mencoba memeriksa apakah C # bertindak sama dengan java di bidang ini. Jawaban Anda adalah satu-satunya yang membandingkannya dengan java (meskipun mungkin tidak sengaja). :)
bvdb
-1

bool adalah alias untuk Boolean. Apa alias lakukan adalah mengganti satu string teks dengan yang lain (seperti pencarian / ganti-semua di notepad ++), tepat sebelum kode dikompilasi. Menggunakan salah satu dari yang lain tidak memiliki efek pada saat dijalankan.

Dalam sebagian besar bahasa lain, satu akan menjadi tipe primitif dan yang lainnya akan menjadi tipe objek (tipe nilai dan tipe referensi dalam C # jargon). C # tidak memberi Anda opsi untuk memilih di antara keduanya. Ketika Anda ingin memanggil metode statis yang didefinisikan dalam kelas Boolean, itu secara otomatis memperlakukan Boolean sebagai tipe referensi. Jika Anda membuat variabel Boolean baru, itu secara otomatis memperlakukannya sebagai tipe referensi (kecuali Anda menggunakan metode Activator.CreateInstance).

Michael Kaldwid
sumber
Boolean adalah tipe nilai, bukan tipe referensi.
Servy
-2

Mungkin bool sedikit "lebih ringan" dari Boolean; Menariknya, mengubah ini:

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

...untuk ini:

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

... menyebabkan file cs saya memunculkan "using System;" Mengubah jenis kembali ke "bool" menyebabkan rambut menggunakan klausa menjadi abu-abu.

(Visual Studio 2010, proyek WebAPI)

B. Clay Shannon
sumber
Ini System.Booleanbukan hanya adil Boolean. Itu using System;muncul karena diizinkan Booleanuntuk diartikan dengan benar System.Boolean. Tidak benar-benar lebih ringan daripada hanya kurang verbose.
Nat