Sự khác biệt giữa các loại bool và Boolean trong C # là gì


Câu trả lời:


382

boollà một bí danh cho System.Booleangiống như intmột bí danh cho System.Int32. Xem danh sách đầy đủ các bí danh tại đây: Bảng loại tích hợp (Tham khảo C #) .


5
Từ liên kết trên microsoft cho biết các từ khóa loại C # và bí danh của chúng có thể hoán đổi cho nhau Nhưng tại sao chúng ta cần Bí danh, Theo quan điểm của tôi Boolean có ý nghĩa hơn thì bool và Int32 có ý nghĩa hơn sau đó tại sao lại là bí danh ???
Asim Sajjad

6
@asim: lười biếng? Nó ít gõ và tránh sự cần thiết phải nhập Hệ thống. Cá nhân, tôi thích các bí danh. Gõ "int" nhanh hơn nhiều so với gõ "Int32".
Kent Boogaart

8
@asmin: Đó là một điều C. int, float, v.v ... là những từ khóa quen thuộc với các lập trình viên C và C ++, vì vậy Microsoft đã quyết định sử dụng các bí danh này để thống nhất.
Mike Chamberlain

42
@Mikey Tôi khá chắc chắn rằng Java đã quyết định sử dụng các bí danh này để thống nhất và Microsoft đã quyết định sử dụng Java để thống nhất ... :-)
tối đa

19
@MaxWell Trong Java, booleanBooleankhông phải là điều tương tự. Một là kiểu dữ liệu nguyên thủy và kiểu kia là một đối tượng.
Rosdi Kasim

48

Tôi không tin là có một.

bool chỉ là một bí danh cho System.Boolean


22

Họ là một trong cùng một. bool chỉ là một bí danh cho Boolean.



15

Tôi nhận ra điều này là nhiều năm sau nhưng tôi tình cờ thấy trang này từ google với cùng một câu hỏi.

Cho đến nay, có một sự khác biệt nhỏ trên trang MSDN.

VS2005

Ghi chú:

Nếu bạn yêu cầu biến Boolean cũng có thể có giá trị null, hãy sử dụng bool. Để biết thêm thông tin, hãy xem Các loại không thể (Hướng dẫn lập trình C #).

VS2010

Ghi chú:

Nếu bạn yêu cầu biến Boolean cũng có thể có giá trị null, hãy sử dụng bool?. Để biết thêm thông tin, hãy xem Các loại không thể (Hướng dẫn lập trình C #).


2
Tôi đã vấp phải điều này - nó dường như là một lỗi trong tài liệu. Tôi đã nhìn thấy trang VS2005 đầu tiên (nó xuất hiện cao hơn trong bảng xếp hạng của Google!) Và nghĩ rằng nó ngụ ý boolcó thể chứa null, nhưng Booleankhông thể. Mặc dù có một liên kết từ tài liệu cũ hơn đến tài liệu mới hơn, tôi đã không đọc kỹ tài liệu mới hơn đủ để nhận thấy sự ?khác biệt duy nhất .
Pickup Logan

1
Xin lỗi nhưng điều đó là sai, bạn không thể chuyển đổi bool hoặc Bolean thành null vì chúng là các loại nullable
Timothy Macharia 22/2/2016

13

Họ giống nhau. Boolean giúp đơn giản hóa chuyển đổi qua lại giữa C # và VB.Net. Hầu hết các lập trình viên C # có xu hướng thích 'bool', nhưng nếu bạn đang ở trong một cửa hàng có nhiều VB.Net và C # thì bạn có thể thích Boolean vì nó hoạt động ở cả hai nơi.


10

Như đã nói, họ giống nhau. Có hai vì bool là một từ khóa C # và Boolean một lớp .Net.


Vì vậy, bool sẽ tốt hơn cho khả năng tương thích đa nền tảng?
bíp bíp


5

bool là một bí danh cho lớp Boolean. Tôi sử dụng bí danh khi khai báo một biến và tên lớp khi gọi một phương thức trên lớp.


8
Không quan tâm - tại sao bạn sẽ sử dụng cả hai? Tôi ủng hộ việc sử dụng cái này hay cái khác. Hoặc sử dụng các bí danh hoặc không, nếu không, mã trông lộn xộn và không nhất quán.
Kent Boogaart

2
Tôi nghĩ rằng nó trông lộn xộn khi bạn không sử dụng cả hai. Sử dụng bí danh để khai báo kiểu dữ liệu và sử dụng tên lớp Actuall khi truy cập các phương thức tĩnh: string x = String.Format ("Hôm nay là: {0}", DateTime.Now);
Scott Dorman

1
Vì vậy, bạn sẽ làm: int i = Int32.Pude (...); ? Tôi có một vài vấn đề với điều đó. Đầu tiên, VS sẽ tô sáng khác nhau theo mặc định (tôi biết bạn có thể thay đổi điều này nhưng hầu hết các nhà phát triển chỉ sử dụng tô sáng cú pháp mặc định). Thứ hai, tìm kiếm khó hơn, đặc biệt là với độ dài (dài / Int64).
Kent Boogaart

4
Vâng, đó là cách chính xác nó nên được thực hiện. int không phải là tên lớp, bạn không nên gọi các phương thức trên nó. Mặt khác, nó là loại dựng sẵn và xác định Int32 i; quá dài dòng và không tự nhiên.
AviD

5
trộn các bí danh và tên lớp chỉ không thêm gì vào mã rõ ràng. Chọn một và gắn bó với nó, imho
Arne Claassen

2

Chúng giống nhau, Bool chỉ là System.Boolean rút ngắn. Sử dụng Boolean khi bạn ở với lập trình viên VB.net, vì nó hoạt động với cả C # và Vb


1

Lưu ý rằng Booleansẽ chỉ có công việc bạn có using System;(thường là, nhưng không nhất thiết, bao gồm) (trừ khi bạn viết nó ra System.Boolean). boolkhông cầnusing System;


0

bool là một kiểu nguyên thủy, có nghĩa là giá trị (true / false trong trường hợp này) được lưu trữ trực tiếp trong biến. Boolean là một đối tượng. Một biến kiểu Boolean lưu trữ một tham chiếu đến một đối tượng Boolean. Sự khác biệt thực sự duy nhất là lưu trữ. Một đối tượng sẽ luôn chiếm nhiều bộ nhớ hơn loại nguyên thủy, nhưng trong thực tế, việc thay đổi tất cả các giá trị Boolean của bạn thành bool sẽ không có bất kỳ tác động đáng chú ý nào đối với việc sử dụng bộ nhớ.

Tôi đã sai; đó là cách nó hoạt động trong java với boolean và Boolean. Trong C #, bool và Boolean đều là loại tham chiếu. Cả hai đều lưu trữ giá trị của chúng trực tiếp trong biến, cả hai đều không thể rỗng và cả hai đều yêu cầu phương thức "convertTO" để lưu trữ giá trị của chúng trong một loại khác (chẳng hạn như int). Nó chỉ quan trọng cái nào bạn sử dụng nếu bạn cần gọi một hàm tĩnh được định nghĩa trong lớp Boolean.


boolBooleankhông phải là hai loại khác nhau, một loại không phải là loại tham chiếu, bạn có thể gọi một phương thức tĩnh trên một loại đó bằng cách sử dụng một mã định danh và trên thực tế bạn không cần phải gọi một ConvertTophương thức để chuyển đổi nó sang loại khác.
Phục vụ

2
Điều đó không đúng rằng " boolBooleancả hai loại tham chiếu". Các từ boolBooleancả hai đều đề cập đến cùng một loại và loại đó là loại giá trị, không phải loại tham chiếu.
Tanner Swett

Cảm ơn, tôi đã cố kiểm tra xem C # có hoạt động giống như java trong lĩnh vực này không. Bạn trả lời là người duy nhất so sánh nó với java (mặc dù có thể không cố ý). :)
bvdb

-1

bool là một bí danh cho Boolean. Những bí danh làm là thay thế một chuỗi văn bản bằng một chuỗi khác (như tìm kiếm / thay thế tất cả trong notepad ++), ngay trước khi mã được biên dịch. Sử dụng cái này không có tác dụng trong thời gian chạy.

Trong hầu hết các ngôn ngữ khác, một ngôn ngữ sẽ là một kiểu nguyên thủy và ngôn ngữ kia sẽ là một loại đối tượng (kiểu giá trị và kiểu tham chiếu trong thuật ngữ C #). C # không cung cấp cho bạn tùy chọn giữa hai. Khi bạn muốn gọi một phương thức tĩnh được định nghĩa trong lớp Boolean, nó sẽ tự động coi Boolean như một kiểu tham chiếu. Nếu bạn tạo một biến Boolean mới, nó sẽ tự động coi nó như một kiểu tham chiếu (trừ khi bạn sử dụng phương thức Activator.CreateInstance).


Boolean là một loại giá trị, không phải là loại tham chiếu.
Phục vụ

-2

Có lẽ bool là một "nhẹ" hơn Boolean; Thật thú vị, thay đổi điều này:

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

... đến đây:

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

... khiến tệp cs của tôi mọc lên "sử dụng Hệ thống;" Thay đổi kiểu trở lại thành "bool" khiến tóc của mệnh đề sử dụng chuyển sang màu xám.

(Visual Studio 2010, dự án WebAPI)


System.Booleanchứ không chỉ là Boolean. Điều using System;này đã được hiển thị bởi vì nó được phép Booleangiải thích chính xác như System.Boolean. Không thực sự nhẹ hơn nhiều như chỉ ít dài dòng.
Nat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.