2013-02-19 48 views
10

Tôi đang tìm cách thực hành tốt nhất về cách tạo lớp giống như enum thay vì các số chứa các giá trị chuỗi. Một cái gì đó như thế này:Lớp học giống như lớp

public static class CustomerType 
{ 
    public static string Type1 = "Customer Type 1"; 
    public static string Type2 = "Customer Type 2"; 
} 

Tôi sẽ sử dụng lớp này trong suốt ứng dụng làm giá trị cho mọi trường hợp tôi cần CustomerType. Tôi không thể sử dụng Enum vì đây là hệ thống kế thừa, và các giá trị như thế này được mã hóa cứng khắp mọi nơi, tôi chỉ cố tập trung chúng ở một nơi.

Câu hỏi là, trong ví dụ trên, tôi nên sử dụng cho khai báo một biến:

  1. tĩnh chỉ đọc từ khóa
  2. từ khóa const
  3. hoặc chỉ tĩnh

Điều gì sẽ là cách tốt nhất để đặt các loại lớp và giá trị này là gì?

+2

Xem http://stackoverflow.com/questions/3190870/const-string-vs-static-string-in-c-sharp. – nneonneo

Trả lời

13

Bạn nên không sử dụng đồng bằng static vì các trường có thể vô tình bị sửa đổi và gây ra sự cố bí ẩn. Do đó, hai lựa chọn của bạn là static readonlyconst.

const sẽ làm cho giá trị của biến được nhúng trong mã gọi vào thời gian biên dịch, có hiệu quả tương đương với mã được mã cứng cũ (nhưng có lợi thế là hằng số biểu tượng). Sự nguy hiểm của const là bạn phải biên dịch lại mọi thứ nếu thay đổi const, vì sợ rằng bạn kết thúc với các hằng số không đồng bộ và các lỗi phức tạp.

static readonly sẽ dẫn đến truy cập trường thông thường, vì vậy bạn sẽ không gặp sự cố đồng bộ hóa. Tuy nhiên, bạn có thể đạt được hiệu suất nhỏ do truy cập trường bổ sung (mặc dù nó có thể không đáng kể trừ khi bạn sử dụng các trường này rất nhiều trong mã quan trọng về hiệu suất). Nếu bạn nghĩ rằng bạn sẽ phải thay đổi các chuỗi tại một số điểm trong tương lai, bạn sẽ muốn sử dụng static readonly.

Từ âm thanh của nó, các giá trị sẽ thay đổi hiếm khi đủ rằng const là đặt cược an toàn. Tuy nhiên, quyết định cuối cùng tùy thuộc vào bạn.

2

Nếu bạn đang sử dụng C#, Tại sao không tạo một enum và thiết lập string dựa Descriptionattribute cho enum giá trị như sau:

public enum CustomerType 
{ 
    [System.ComponentModel.Description("Customer Type 1")] 
    Type1, 

    [System.ComponentModelDescription("Customer Type 2")] 
    Type2 
} 

Sau đó, bạn có thể nhận được giá trị Description các giá trị enum như sau:

int value = CustermType.Type1; 
string type1Description = Enums.GetDescription((CustomerType)value); 

Đối khác nhau cách khác để có được giá trị Description thuộc tính của enum, vui lòng tham khảo 012 này

+3

nó quá "hacky", nó không phải là thẳng về phía trước, bạn cần phải làm thêm đúc, mã không rõ ràng. Bạn cũng có thể làm như Enums.GetDescription ((CustomerType) CustermType.Type1); nhưng whats điểm nếu tôi có thể có nó straght về phía trước với chuỗi CustermType.Type1String. Cảm ơn anyway, tôi không biết trước về thuộc tính Description :) –

Các vấn đề liên quan