2011-12-04 32 views
5

Tôi có một Pitch enum và một Pitch lớp, cả hai tự nhiên với tôi nên được đặt tên như vậy, tuy nhiên nó gây nhầm lẫn để có cả hai có cùng tên. Có bất kỳ hướng dẫn nào về thời điểm tên của một enum xung đột với loại lớp không?Việc cần làm khi tên enum gặp phải tên lớp?

VÍ DỤ:

public enum Pitch 
{ 
    Fastball, 
    Sinker, 
    Curveball 
} 

public class Pitch 
{ 
} 
+3

Nếu bạn có hai loại mà bạn muốn đặt tên giống nhau, có thể có vấn đề với thiết kế của bạn. Bạn có thể cho chúng tôi thấy mã cho lớp và enum không? – Steven

Trả lời

6

Đặt tên là PitchType enum, PitchKind, PitchMagnitude, PitchQuality, PitchShape hoặc bất kỳ thứ gì phù hợp nhất.


Một xem xét khác là liệu thiết kế lớp có thể được cải thiện hay không. Thay vì có một tài sản bên trong Pitch lớp PitchType, bạn cũng có thể tạo ra một hệ thống phân cấp lớp:

public abstract class Pitch {} 

public class Fastball : Pitch {} 

public class Sinker : Pitch {} 

public class Curveball : Pitch {} 
+0

Làm thế nào về PitchType? Bất cứ ai có thể nghĩ ra một từ tốt hơn Loại mặc dù, vì đó có một ý nghĩa trong thời gian chạy chính nó? – Rhubarb

+1

Bạn có thể cho chúng tôi thấy enum không? Nó chứa chính xác những gì? –

+0

Pitch enum công khai {Fastball, Curveball, Sinker} – Rhubarb

3

Sử dụng không gian tên để nhóm chúng lại một cách logic. Đối với khuôn khổ, tên lớp là tên đầy đủ, có thể là MusicPlayer.Notes.Pitch và không chỉ Pitch. Các lớp trong các không gian tên khác nhau do đó không thể đụng độ được.

3

Nhúng enum trong lớp:

public class Pitch 
{ 
    public enum Kind { 
     Fastball, 
     Curveball, 
     Sinker 
    } 
} 

Sau đó bạn có thể truy cập nó thông qua các lớp:

Pitch.Kind.Fastball 
+0

Tôi nghĩ về điều đó, nhưng điều đó vi phạm một số quy ước của OO mà tôi không thể nghĩ ra? Không làm cho một đi qua mức độ thêm đặt tên chỉ để đối phó với một cuộc đụng độ có nghĩa là nó vẫn còn thiết kế tốt? – Rhubarb

+0

Tôi không thấy vấn đề gì ở đây. Nhưng enum tốt hơn nên được nhúng vào trong lớp, trong đó nó sẽ được sử dụng hoặc ít nhất nó nên có một mối quan hệ hợp lý mạnh mẽ với nó. –

+0

Xem câu hỏi stackoverflow [Ưu điểm và nhược điểm của việc sử dụng các lớp và liệt kê C++ lồng nhau?] (Http://stackoverflow.com/questions/216748/pros-and-cons-of-using-nested-c-classes-and-enumerations) . –

1

Khi một enum không được nhúng vào một lớp, hãy đảm bảo bạn sử dụng tên khác trước nhãn để tránh xung đột tên. Bạn cũng có thể sử dụng không gian tên theo đề xuất của joey.

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