2011-03-14 4 views
0

기본적으로 열거와 범위의 문제가, 는 열거 클래스 ... 난 내 양식 코드에서 참조 할나는 내가 체스 게임의 코드를 하나 개의 클래스가,

namespace WindowsFormsApplication1 
{ 
    enum STATE { PROMOTION, CASTLING, CHECK, CHECKMATE, DONOTHING }; 

..... 

있다 : 내가이 얻을

namespace WindowsFormsApplication1 
{ 

    public partial class ChessBoard: Form 
    { 
public STATE Gamestate { set; get; } 

...... 

:

오류 1 접근성 일관성 : 속성 유형 'WindowsFormsApplication1.STATE가'덜 교류 여기에 코드입니다 이 접근하기보다는 재산 'WindowsFormsApplication1.ChessBoard.Gamestate'D : \ 문서 및 설정 \ 디마 \ 비주얼 스튜디오 2008 \ 내 문서 프로젝트 \ \ ChessBoardGame \ ChessBoardGame \ ChessBoard.cs (15) (22) ChessBoardGame

왜 나는 그것을 얻을 않습니다 내가 어떻게 막을 수 있니?

namespace WindowsFormsApplication1 
{ 
    public enum STATE { PROMOTION, CASTLING, CHECK, CHECKMATE, DONOTHING }; 

..... 

답변

11

당신은 WindowsFormsApplication1public로 열거를 선언해야 일반적인 명명 규칙을 따르고 기본값을 첫 번째로 두십시오. 그래서 결과가 같은 것을 볼 수 있었다 : 당신의 열거의 첫 번째 구성원으로 DoNothing을 놓음으로써

public enum State 
{ 
    DoNothing, 
    Promotion, 
    Castling, 
    Check, 
    Checkmate 
} 

을 디폴트 값 (0)로 선언. 따라서 어떤 사람이 default(State)을 묻는다면 그는 단순히 기본값으로 아주 좋은 소리 인 DoNothing을 얻습니다.

+1

오케이, 알았어, 내가 너에게 rep ?? – NewOrder

+0

내 질문의 왼쪽에있는 투표 번호 위의 '위로'화살표를 클릭하거나 대답으로 표시하기 위해 윤곽선이있는 체크 표시를 클릭하여 내 대답을 upvote 할 수 있습니다. – FreeAsInBeer

+0

내 열거 형은 공개 ("전체"클래스)이지만이 문제는 아주 똑같습니다. 이 열거 형을 사용하는 메서드는 (부분 클래스의 일부입니다 (실제로 의미하는 것을 모르는) private으로 설정할 때 작동하지만 public으로 만들고 싶습니다. 그러면 저에게이 오류가 발생합니다 ... EDIT : 방금 해결되었습니다. 그것 ... 내 수업에는 접근성 키워드가 누락되었습니다. 수업을 공개로 설정했는데 성공했습니다! – MahNas92

2

를가 귀하의 질문에 대답 (이 이미 @FreeAsInBeer에 의해 수행되는 원인이)하지 않더라도 당신은 정말 좀 더 충실하기 위해 고려해야합니다

9

먼저 C#에서 SCREAMING CAPS를 사용하지 마십시오. PascalCaseIdentifiers (또는 locals에 대해서는 camelCaseIdentifiers)를 사용하십시오. 그들은 훨씬 더 즐겁습니다.

둘째, 일부 주에서는 누락 된 것일 수 있습니다. 게임이 en passent 캡처가 허용되는 상태에 있는지 여부를 추적하는 것은 나쁜 생각이 아닙니다. 또한 교착 상태 또는 기타 "그려진"상황에 대한 상태가 없습니다.

셋째, 실제 질문에 답변하십시오. 오류는 무엇이 잘못되었는지를 알려줍니다. "State"와 "GameState"는 일관성없는 접근성을가집니다. State에 접근성 수정자를 넣으려면 생략 했으므로 최상위 열거 형의 "내부"인 기본 액세스 가능성을 얻습니다. "GameState"는 공용 클래스의 공용 속성입니다. 그래서 여러분은 "대중에게 제공되는이 타입의 타입은 내 어셈블리의 내부 구현 세부 사항"이라고 말하고 있습니다. 이것은 분명히 약간 불가능한 것으로 보이므로 컴파일러는 플래그를 설정합니다.

내가 묻는 첫 번째 질문은 "클래스가 공개 된 이유는 무엇입니까?"입니다. 이 클래스를 외부의 어셈블리로 만들 계획입니까?

당신은 그 때 공개하는 클래스를하려는 경우 :

  • 이 속성은 개인 또는 내부 만들거나 다음 내부로 클래스를하려는 경우

공공 열거합니다 클래스를 내부로 만든다.

관련 문제