Khi sử dụng một lớp có thuộc tính enum, thường có xung đột tên giữa tên thuộc tính và loại enum. Ví dụ:Xung đột đặt tên và thuộc tính
enum Day{ Monday, Tuesday, ... }
class MyDateClass
{
private Day day;
public Day Day{ get{ return day; } }
}
Vì chỉ có cờ enums nên có tên số nhiều, đặt tên cho các enum "Ngày" không phải là cách để đi cho một enum phi cờ. Trong ví dụ trên, bạn có thể sử dụng một số biến thể như "WeekDay" cho enum hoặc thuộc tính. Nhưng trong trường hợp chung không có biến thể tốt như vậy, do đó bạn sẽ sử dụng các thuộc tính như "FooMode" hoặc "BarKind" cho một đối tượng có thuộc tính enum của kiểu Foo và Bar. Không quá tao nhã.
Làm thế nào để bạn thường đặt tên cho enums và thuộc tính trong trường hợp này?
Cảm ơn phản hồi nhanh. Một câu hỏi khác: tại sao nó không được khuyến khích để làm tổ enums công cộng, và làm thế nào để bạn giải quyết các vấn đề đặt tên nếu bạn muốn làm tổ enums công cộng?
class Vehicle
{
enum Kind{ Car, Bike }
public Kind Kind{ get{ return ... } }
}
class Meal
{
enum Kind{ Dessert, MainCourse }
public Kind Kind{ get{ return ... } }
}
Trong trường hợp trên, Bữa ăn và Xe có chung không gian tên, tôi không thể di chuyển "Loại" bên ngoài một trong các lớp mà không đổi tên nó là MealKind và VehicleKind tương ứng. Tôi thích giao diện của
myVehicle.Kind = Vehicle.Kind.Car
Nhưng đó không phải là những gì các hướng dẫn đề xuất. Thực hành tốt nhất ở đây là gì? Không bao giờ sử dụng các enums công cộng lồng nhau và thay vào đó đặt tên cho chúng là VehicleKind, vv?
Nó sẽ không hoạt động trong một kịch bản lồng nhau. Sau đó, rõ ràng là một cuộc đụng độ tên. Tôi thậm chí không nghĩ rằng sử dụng một 'sử dụng' bí danh sẽ làm việc trong trường hợp này. – leppie
Enum lồng nhau làm cho mã dài hơn và được gắn chặt với lớp. Oh, và trong ví dụ của bạn, bạn có thể muốn lấy xe và xe đạp từ xe và tráng miệng và MainCourse từ bữa ăn, vì vậy không cần phải enum :) – OregonGhost
Giả sử bạn cần enum (tức là loại phải được sử dụng như một giá trị, không một phân lớp), không phải là nó đẹp hơn khi có các enum lồng nhau công khai hơn là có rất nhiều enums bắt đầu với tên lớp như VehicleKind? Ví dụ khi đổi tên lớp, tất cả các enums chỉ thuộc lớp đó phải được đổi tên ... – AndersF