2010-03-29 34 views
53

Tôi có một chương trình với một lớp có chứa một enum công cộng, như sau:C# Công Enums trong lớp

public class Card 
{ 
    public enum card_suits 
    { 
     Clubs, 
     Hearts, 
     Spades, 
     Diamonds 
    } 
... 

Tôi muốn sử dụng này ở nơi khác trong dự án của tôi, nhưng không thể làm điều đó mà không cần dùng thẻ .card_suit. Có ai biết nếu có cách nào trong C# tuyên bố điều này để tôi có thể khai báo

card_suits suit; 

Nếu không tham chiếu lớp học đó?

+3

Sớm, trong C# 6, câu lệnh sử dụng tĩnh sẽ làm cho nó để bạn không phải tham khảo lớp như thế này. Nhưng, không phải trong C# ngày hôm nay. –

Trả lời

100

Hiện tại, enum của bạn được lồng trong lớp Card của bạn. Tất cả bạn phải làm là di chuyển các định nghĩa của enum ra khỏi lớp:

// A better name which follows conventions instead of card_suits is 
public enum CardSuit 
{ 
    Clubs, 
    Hearts, 
    Spades, 
    Diamonds 
} 

public class Card 
{ 
} 

Để Chỉ định:

Sự thay đổi tên từ card_suits để CardSuit đã được đề xuất bởi vì chủ trương Microsoft đề nghị Pascal Case để Enumerations và dạng số ít mô tả hơn trong trường hợp này (vì số nhiều sẽ gợi ý rằng bạn đang lưu trữ nhiều giá trị liệt kê bằng cách OR chúng cùng nhau).

+0

Nhưng tôi chỉ muốn khai báo nó ở một nơi, nhưng sử dụng nó trong không gian tên –

+4

Bạn vẫn sẽ có quyền truy cập vào nó trong toàn bộ không gian tên với việc khai báo nó chỉ một lần. –

+0

@ pm_2 sau câu trả lời của Justin sẽ cho phép bạn làm chính xác điều đó. –

20

Bạn cần xác định enum bên ngoài lớp học.

public enum card_suits 
{ 
    Clubs, 
    Hearts, 
    Spades, 
    Diamonds 
} 

public class Card 
{ 
    // ... 

đó đang được nói, bạn cũng có thể muốn xem xét sử dụng standard naming guidelines for Enums, mà sẽ được CardSuit thay vì card_suits, vì Pascal Vỏ bọc được đề nghị, và enum không được đánh dấu với FlagsAttribute, cho thấy nhiều giá trị thích hợp trong một biến duy nhất.

11

Chỉ cần khai báo enum bên ngoài giới hạn của lớp học. Như thế này:

public enum card_suits 
{ 
    Clubs, 
    Hearts, 
    Spades, 
    Diamonds 
} 

public class Card 
{ 
    ... 
} 

Hãy nhớ rằng một enum là một loại. Bạn cũng có thể xem xét đặt enum trong tập tin riêng của nó nếu nó sẽ được sử dụng bởi các lớp khác. (Bạn đang lập trình một trò chơi bài và bộ com lê là một thuộc tính rất quan trọng của thẻ, trong mã có cấu trúc tốt, sẽ cần phải được truy cập bởi một số lớp.)

+0

Miễn là nó 'công khai' OP không nên có một vấn đề nhưng theo như được tổ chức và cấu trúc tốt, sau đó tôi chắc chắn đồng ý với bạn. – Si8

1

Chỉ cần khai báo bên ngoài định nghĩa lớp.

Nếu tên của namespace của bạn là X, bạn sẽ có thể truy cập giá trị của enum bởi X.card_suit

Nếu bạn chưa xác định một không gian tên cho enum này, chỉ cần gọi chúng bằng cách card_suit.Clubs, vv

0

Di chuyển định nghĩa enum ra ngoài lớp nhưng trong vùng tên hiện tại. Tuyên bố nó là công khai làm cho nó có thể truy cập toàn cầu từ đó. Có một ví dụ tốt được cung cấp bởi video www.LearnVisualStudio.Net cho 'Học C# cho người mới bắt đầu'. Tôi nghĩ rằng điều này cũng có thể truy cập tại www.microsoftvirtualacademy.com dưới cùng một C# cho loạt người mới bắt đầu.

Có nói vui lòng sử dụng quy ước đặt tên Pascal hoặc Carmel Case để làm cho mã của bạn có thể đọc được và để tránh sự mơ hồ. ví dụ: CardSuit được ưu tiên.

-1

Tôi nghĩ rằng đây là những gì bạn muốn.

using card_suits = Card.card_suits;