Giải pháp thay thế
Trong công ty của tôi, chúng tôi tránh "nhảy qua các dự án" để đến các dự án cấp thấp hơn không phổ biến. Chẳng hạn, lớp trình bày / API của chúng tôi chỉ có thể tham chiếu lớp miền của chúng tôi và lớp miền chỉ có thể tham chiếu lớp dữ liệu.
Tuy nhiên, đây là một vấn đề khi có những enum cần được tham chiếu bởi cả lớp trình bày và lớp miền.
Đây là giải pháp mà chúng tôi đã thực hiện (cho đến nay). Đó là một giải pháp khá tốt và hoạt động tốt cho chúng tôi. Các câu trả lời khác đã được nhấn xung quanh này.
Tiền đề cơ bản là enums không thể được kế thừa - nhưng các lớp có thể. Vì thế...
// In the lower level project (or DLL)...
public abstract class BaseEnums
{
public enum ImportanceType
{
None = 0,
Success = 1,
Warning = 2,
Information = 3,
Exclamation = 4
}
[Flags]
public enum StatusType : Int32
{
None = 0,
Pending = 1,
Approved = 2,
Canceled = 4,
Accepted = (8 | Approved),
Rejected = 16,
Shipped = (32 | Accepted),
Reconciled = (64 | Shipped)
}
public enum Conveyance
{
None = 0,
Feet = 1,
Automobile = 2,
Bicycle = 3,
Motorcycle = 4,
TukTuk = 5,
Horse = 6,
Yak = 7,
Segue = 8
}
Sau đó, để "kế thừa" các enum trong một dự án cấp cao khác ...
// Class in another project
public sealed class SubEnums: BaseEnums
{
private SubEnums()
{}
}
Điều này có ba lợi thế thực sự ...
- Các định nghĩa enum tự động giống nhau trong cả hai dự án - theo định nghĩa.
- Mọi thay đổi đối với các định nghĩa enum sẽ tự động lặp lại trong lần thứ hai mà không phải thực hiện bất kỳ sửa đổi nào đối với lớp thứ hai.
- Các enum dựa trên cùng một mã - vì vậy các giá trị có thể dễ dàng được so sánh (với một số cảnh báo).
Để tham chiếu các enum trong dự án đầu tiên , bạn có thể sử dụng tiền tố của lớp: BaseEnums.StatusType.Pending hoặc thêm một "bằng cách sử dụng BaseEnums tĩnh;" tuyên bố cho việc sử dụng của bạn.
Tuy nhiên, trong dự án thứ hai khi xử lý lớp kế thừa, tôi không thể sử dụng cách tiếp cận "sử dụng tĩnh ..." , vì vậy tất cả các tham chiếu đến " enum kế thừa" sẽ được thêm tiền tố vào lớp, ví dụ SubEnums.StatusType.Pending . Nếu bất cứ ai nghĩ ra cách cho phép sử dụng phương pháp "sử dụng tĩnh" trong dự án thứ hai, hãy cho tôi biết.
Tôi chắc chắn rằng điều này có thể được điều chỉnh để làm cho nó thậm chí còn tốt hơn - nhưng điều này thực sự hoạt động và tôi đã sử dụng phương pháp này trong các dự án làm việc.
Vui lòng bỏ phiếu này nếu bạn thấy nó hữu ích.