Tôi có thể bỏ lỡ một số điểm ở đây, nếu đó là trường hợp - vui lòng bao gồm cuộc thảo luận đó như là một phần của câu hỏi của tôi :).Enum với các phương pháp cho chức năng (Kết hợp Class/Enum)
Đây là mẫu rút gọn và được đổi tên thành mã hoạt động. GetTicks (..) là một mẫu đơn, có thể là bất kỳ loại chức năng nào (giá trị của > 0 < 9
phải trả về một Enum a.so cụ thể).
public static class Something
{
public enum TypeOf : short
{
Minute = 2, Hour = 3, Day = 4, ........
}
public static long GetTicks(Something.TypeOf someEnum)
{
long ticks = 0;
switch (someEnum)
{
case Something.TypeOf.Minute:
ticks = TimeSpan.TicksPerMinute;
break;
case Something.TypeOf.Hour:
ticks = TimeSpan.TicksPerHour;
break;
....
}
return ticks;
}
}
// This class is called from anywhere in the system.
public static void SomeMethod(string dodo, object o, Something.TypeOf period)
{
// With the design above
long ticks = Something.GetTicks(period);
// Traditional, if there was a simple enum
if (period == Something.Day)
ticks = TimeSpan.FromDays(1).Ticks;
else if (period == Something.Hour)
ticks = TimeSpan.FromHours(1).Ticks;
}
Ý tưởng là thu thập chức năng liên quan đến enum, gần nhất có thể với bản thân enum. Enum là hàm lý do. Ngoài ra tôi tìm thấy nó dễ dàng và tự nhiên để tìm các chức năng như vậy gần enum. Ngoài ra, thật dễ dàng để sửa đổi hoặc mở rộng.
Hạn chế tôi có, là tôi phải nêu rõ enum rõ ràng hơn Something.TypeOf
. Thiết kế có thể trông không chuẩn? và sẽ áp dụng nếu enum là để sử dụng nội bộ trong lớp.
Bạn sẽ làm điều này tốt hơn như thế nào? Tôi đã cố gắng trừu tượng, thừa kế cơ sở, một phần. Không ai trong số họ dường như áp dụng.
Thực sự hoàn toàn giống nhau! Tôi thích cách tiếp cận của bạn và sẽ đào sâu vào nó sau này khi tôi có thể nhận biết thời gian để tối ưu hóa và hiểu lợi ích của nó (nếu một số);)). – Independent
Vâng, các enums giống Java. Mặc dù tôi khuyên bạn nên sử dụng một cấu trúc, không phải là một lớp học. Và trường _Value_ để so sánh nhanh và câu lệnh chuyển đổi. – IllidanS4
@ IllidanS4: Tôi thấy không có đặc biệt để sử dụng một cấu trúc - và một lớp cho phép các lớp con khác nhau thực hiện hành vi khác nhau (giống như Java enums). Ngoài ra, một cấu trúc có nghĩa là 'mặc định (Foo)' luôn luôn là một giá trị "thực", có thể là một cơn đau ở cổ. Trong khi tôi chắc chắn có những trường hợp mà một phiên bản struct sẽ là thích hợp, tôi thường xuyên sử dụng các lớp học. –