2010-03-29 3 views
53

나는, 공공 열거를 포함하는 클래스와 프로그램을 가지고 :C# 공공 열거 형은 다음과 같이 클래스에

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

내가 내 프로젝트의 다른 곳에서 이것을 사용하기를 원하지만 카드를 사용하지 않고 할 수 없어 .card_suit. 아무도 내가 그것에서의 클래스를 참조하지 않고

card_suits suit; 

를 선언 할 수 있어요 있도록이를 선언하는 C#에서 방법이 있는지 알고 있나요?

+3

곧 C# 6에서 정적 사용 문을 사용하면 이처럼 클래스를 참조하지 않아도됩니다. 그러나 C#에서는 아닙니다. –

답변

100

현재 enumCard 클래스 안에 중첩되어 있습니다.

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

public class Card 
{ 
} 

가 지정하는 방법 :

CardSuitcard_suits에서 이름 변경이 제안 된 마이크로 소프트 지침이 열거 형에 대한 파스칼 케이스를 제안하기 때문에 당신이해야 할 모든 클래스의 밖으로 enum의 정의를 움직이다 이 경우에는 단수 형태가 더 서술 적입니다 (복수형은 OR 연산을 통해 여러 열거 형 값을 저장하는 것이 좋습니다).

+0

하지만 한 곳에서 선언하고 싶지만 네임 스페이스 전체에서 사용하고 싶습니다. –

+4

한 번만 선언하면 네임 스페이스 전체에서 액세스 할 수 있습니다. –

+0

@ pm_2 다음은 저스틴의 대답에 따라 정확하게 할 수 있습니다. –

20

클래스 밖에서 enum을 정의해야합니다.

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

public class Card 
{ 
    // ... 

, 당신은 또한 여러 값이 적절한 제안, 파스칼 케이싱 제안하고, 열거가 FlagsAttribute 표시되지 않기 때문에, 대신 card_suits의 CardSuit 될 것 standard naming guidelines for Enums를 사용하는 것이 좋습니다 말했다되고 그건 하나의 변수로

11

클래스 경계 외부에서 enum을 선언하기 만하면됩니다. 이처럼 :

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

public class Card 
{ 
    ... 
} 

열거는 유형입니다 기억하십시오. 다른 클래스에서 열거 형을 사용하는 경우 해당 열거 형을 자체 파일에 저장하는 것도 좋습니다. (당신은 카드 게임을 프로그래밍하고 있으며, 슈트는 구조화 된 코드에서 많은 클래스로 액세스 할 수 있어야하는 카드의 매우 중요한 속성입니다.)

+0

OP가 '공개적으로'있는 한 OP에 문제가 없어야하지만 조직되고 잘 구조화되어 있다면 확실히 그렇다. 당신과 동의. – Si8

1

그냥 클래스 정의 밖에서 선언하십시오.

네임 스페이스의 이름이 X 인 경우이 열거에 대한 네임 스페이스를 정의하지 않은 경우, 당신은 단지 등 card_suit.Clubs

에 의해 그들에게 전화, X.card_suit

에 의해 열거의 값에 액세스 할 수 있습니다

0

enum 정의를 클래스 외부에서 현재 네임 스페이스 내로 이동합니다. 공개로 선언하면 전 세계적으로 액세스 할 수 있습니다. 초보자를위한 'Learning C#'을위한 www.LearnVisualStudio.Net 비디오가 제공하는 좋은 예가 있습니다. 제 생각에는 www.microsoftvirtualacademy.com에서도 같은 초보자 용 C#에서 액세스 할 수 있습니다.

파스칼 또는 카멜 케이스 명명 규칙을 사용하여 코드를 읽기 쉽도록하고 모호성을 피하십시오. 예 : CardSuit가 선호됩니다.

-1

나는 이것이 당신이 원하는 것이라고 생각합니다.

using card_suits = Card.card_suits;