Câu hỏi này có trong tâm trí tôi một thời gian, xin lỗi nếu nó xuất hiện chủ quan. Có một số nhược điểm trong việc sử dụng bool trong các thuộc tính công cộng và các hàm tạo cho các đối tượng dữ liệu. Hãy xem xét mã sau đây làm ví dụ.Hai điều tra thành viên so với giá trị boolean
Sử dụng bool:
public class Room
{
public string Name { get; set; }
public bool Bookable { get; set; }
public Room(string name, bool bookable);
}
và việc sử dụng các lớp này
Room r = new Room ("101", true);
Đây là phù hợp chức năng, có tuy nhiên một cách khác để thực hiện nó:
Sử dụng enum :
public enum BookingStatus
{
Bookable,
NotBookable
}
public class Room
{
public string Name { get; set; }
public BookingStatus Bookable { get; set; }
public Room(string name, BookingStatus bookable);
}
và việc sử dụng các lớp
Room r = new Room ("101", BookingStatus.Bookable);
này Đối với tôi hai xuất hiện chức năng tương đương, có một số ưu điểm và nhược điểm của mỗi tuy nhiên:
- Khi thiết lập các thuộc phương pháp Enum là hơn verbose (bạn có thể phỏng đoán việc sử dụng enum từ mã một mình)
- Các số đếm có thể được mở rộng để hỗ trợ các trạng thái khác (đặc biệt hữu ích cho một API)
- Các số đếm yêu cầu nhập nhiều hơn đáng kể (mặc dù giảm rất nhiều)
- Không thể sử dụng các số đếm trong điều kiện (tức là nếu (r.bookable)), mặc dù tôi đánh giá cao điều này là tầm thường để giải quyết.
Tôi có thiếu thứ gì đó, hoàn toàn không có dấu? Tôi không chắc tại sao điều này lại gây lỗi cho tôi rất nhiều, có lẽ tôi cũng quá OCD vì lợi ích của chính tôi!
Ý kiến: này có vẻ như nó không phải là ví dụ tốt nhất - nếu nó một câu trả lời đúng/không đúng, thì bools là thích hợp. Mặc dù bạn nên đặt tên cho các thuộc tính của mình một cách chính xác theo quy ước (ví dụ "IsBookable") - Ví dụ tốt hơn là một câu hỏi không có hoặc không có, chẳng hạn như giới tính hoặc đơn vị đo lường, v.v. - ngay cả khi bạn chỉ nhận ra hai trạng thái (inch vs cm, hoặc nam vs nữ), bạn nên sử dụng enum, bởi vì đây chắc chắn không phải là câu hỏi "có hoặc không" (mặc dù bạn có thể làm cho chúng thành có/không có câu hỏi, chúng không, và mỗi người có thể mở rộng để hỗ trợ nhiều tiểu bang hơn). – BrainSlugs83