Một nhà phát triển tại nơi làm việc gần đây đã bắt đầu sử dụng một mẫu lớp thay vì enums ở những nơi mà enums thường sẽ phù hợp. Thay vào đó, ông sử dụng một cái gì đó tương tự như dưới đây:Khi nào và làm thế nào tôi nên sử dụng các lớp liệt kê thay vì enums?
internal class Suit
{
public static readonly Suit Hearts = new Suit();
public static readonly Suit Diamonds = new Suit();
public static readonly Suit Spades = new Suit();
public static readonly Suit Clubs = new Suit();
public static readonly Suit Joker = new Suit();
private static Suit()
{
}
public static bool IsMatch(Suit lhs, Suit rhs)
{
return lhs.Equals(rhs) || (lhs.Equals(Joker) || rhs.Equals(Joker));
}
}
lập luận của ông là nó vô hình trông giống như một điều tra, nhưng cho phép ông để chứa các phương pháp liên quan đến thù lao (như IsMatch ở trên) để được chứa bên trong liệt kê chính nó.
Anh ấy gọi đây là lớp liệt kê, nhưng đó không phải là điều tôi từng thấy trước đây. Tôi tự hỏi những lợi thế và bất lợi là gì và tôi có thể tìm thêm thông tin ở đâu?
Cảm ơn
Edit: Một ưu điểm khác ông mô tả là việc có thể để thêm một ToString cụ thể() thực hiện cho việc đếm.
Vâng, bạn không thể làm điều này bằng 'enum' vì bạn không thể nhập enum vào loại phức tạp. Tôi đoán đây là lý do chính để sử dụng một cái gì đó như thế này? –
Nhược điểm thực sự duy nhất (bên cạnh một số thư viện của bên thứ ba không quá hài lòng về nó) Tôi đã gặp phải là bạn không thể (trivially) làm một chuyển đổi/trường hợp trên các loại. Nhưng sau đó tôi đã không sử dụng kỹ thuật rộng rãi trong C#. –
Tránh các câu lệnh chuyển đổi là điểm bán hàng chính của anh ấy. Ông đã sử dụng nó để tránh những gì ông mô tả như là báo cáo chuyển đổi nguyên khối. Đó là một điểm mặc dù nó dừng bạn sử dụng chúng ngay cả khi bạn muốn. –