Apa perbedaan antara tipe bool dan Boolean dalam C #


Jawaban:


382

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


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


22

Mereka satu dalam persamaan. bool hanyalah alias untuk Boolean.



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


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.


10

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


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


5

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


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


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;


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.


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


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)


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.