2011-11-01 38 views
15

Các nguyên tắc rõ ràng cho việc liệt kê ...Quy ước đặt tên cho lớp hằng số trong C#: số nhiều hoặc số ít?

Hãy sử dụng tên ít nhất để đếm, trừ khi giá trị của nó là trường bit.

(Nguồn: http://msdn.microsoft.com/en-us/library/ms229040.aspx)

... nhưng không quá rõ ràng cho một lớp học của các hằng số (hoặc read-only tĩnh lĩnh vực/Properties). Ví dụ, tên của lớp này là số ít hay số nhiều?

public static class Token // or Tokens? 
{ 
    public const string Foo = "Foo"; 
    public const string Bar = "Bar"; 
    public const string Doo = "Doo"; 
    public const string Hicky = "Hicky"; 
} 
+0

Hãy xem xét điều này, nếu bạn đang tạo lớp để giữ các phương pháp mở rộng, bạn có cho nó một tên số ít hay số nhiều không? Ngoài ra, hãy nghĩ về các phương thức khác chỉ đơn giản là giữ các tham chiếu đến các giá trị/cá thể cụ thể. ví dụ: 'Màu sắc'. –

+4

Đối với những gì nó có giá trị, Windows chính nó dường như sử dụng số nhiều: [System.Windows.Media.Brushes] (http://msdn.microsoft.com/en-us/library/system.windows.media.brushes.aspx) , [System.Windows.Media.Colors] (http://msdn.microsoft.com/en-us/library/system.windows.media.colors.aspx). –

+1

@RaymondChen không phải lúc nào cũng vậy; ví dụ 'System.Drawing.Color' có cách tiếp cận ngược lại. - Có vẻ như đôi khi các lớp WPF làm những điều kỳ lạ với việc đặt tên. – BrainSlugs83

Trả lời

22

Tôi sẽ sử dụng số nhiều: Tokens. Điều này ngụ ý rằng lớp tĩnh đang phục vụ như là một tập hợp các mục của một số loại (có kiểu thời gian chạy không phải là của lớp).

Mặt khác, các trường của điều tra là trường hợp của kiểu liệt kê. Ví dụ: TypeCode.String a TypeCode. Thật lạ khi nói rằng TypeCodes.StringTypeCodes.

Tuy nhiên, trong Tokens ví dụ của bạn, bằng cách sử dụng ít cho chúng ta Token.Foo, mà một mã thông báo, nhưng nó không phải là một Token (nó là một string).

(Hoặc, nếu bạn sử dụng tên lớp nhiều, Tokens.Foo là một string, không phải là một Tokens Ack.!)

+1

+1. Tôi thích lý do của bạn. – devuxer

+1

+1. Tôi thích cùng một cách tiếp cận thông thường với tình huống. Khi đặt tên bất cứ thứ gì, tôi đảm bảo rằng nó có thể phát âm và có thể sử dụng được trong cuộc trò chuyện, vì có một cơ hội tốt ở điểm này hay điểm khác, nó có thể cần được truyền đạt tới một nhà phát triển khác. Trong khi có "tiêu chuẩn" tại chỗ trong cách chúng ta đặt tên mọi thứ, luôn luôn có những trường hợp đặc biệt có thể ra lệnh khởi hành từ tiêu chuẩn. –

1

Tôi không có bất kỳ tiêu chuẩn đặt tên chính thức nào để liên kết, nhưng tôi có thể cho bạn biết tôi sẽ làm gì.

Tôi sẽ sử dụng tên số nhiều: tokens

+0

Tôi nên lưu ý rằng tôi thường phá vỡ các hướng dẫn đặt tên cho enums cũng và tên họ số nhiều. Nó chỉ cảm thấy tự nhiên hơn với tôi. –

6

Kể từ khi cả hai đều sử dụng về cơ bản theo cùng một cách, và là khái niệm điều tương tự, tôi khuyên bạn nên chỉ theo các hướng dẫn enum.

+1

+1 cho tên số ít. IMHO số nhiều có ý nghĩa khi viết các lớp tĩnh (đây là một container với Tokens Foo, Bar, vv), trong khi số ít có ý nghĩa khi sử dụng lớp tĩnh (Làm điều gì đó với Token Foo). Vì trường hợp thứ 2 (sử dụng mã thông báo) nên vượt xa trường hợp thứ nhất (xác định mã thông báo), số ít phù hợp hơn. –

0

Tôi sẽ sử dụng tên số nhiều: Tokens

Tuy nhiên bạn có thể xem xét việc tạo ra một Token lớp để giữ giá trị const.

Điều này tương tự như System.Windows.Media.Colors, ví dụ: Colors.Blue trả về phiên bản System.Windows.Media.Color.

public class Token 
{ 
    public Token(string value) 
    { 
     Value = value; 
    } 

    public string Value { get; private set; } 

    public static implicit operator string(Token token) 
    { 
     return token == null ? null : token.Value; 
    } 

    public bool Equals(string value) 
    { 
     return String.Equals(Value, value); 
    } 

    public override bool Equals(object obj) 
    { 
     var other = obj as Token; 
     if (other == null) 
     { 
      return false; 
     } 

     return Equals(other.Value); 
    } 

    public override int GetHashCode() 
    { 
     return Value.GetHashCode(); 
    } 

    public override string ToString() 
    { 
     return Value; 
    } 
} 

public static class Tokens 
{ 
    public static readonly Token Foo = new Token("Foo"); 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     // You can use it as if they were string constants. 
     string token = Tokens.Foo; 
     bool areEquals = String.Equals(token, Tokens.Foo); 
    } 
} 
Các vấn đề liên quan