2011-03-14 86 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:\ Documents和Settings \迪马\我的文档\ Visual Studio 2008的\项目\ ChessBoardGame \ ChessBoardGame \ ChessBoard.cs 15 22 ChessBoardGame

为什么我得到它,我如何防止它?

回答

11

您需要声明的枚举如publicWindowsFormsApplication1

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

..... 
+1

oooh好的,我如何给你代表?? – NewOrder 2011-03-14 12:39:39

+0

您可以通过点击问题左侧的投票数字上方的“向上”箭头和/或点击勾选的复选标记来将其标记为答案,以激活我的答案。 – FreeAsInBeer 2011-03-14 12:46:05

+0

我有这个非常相同的问题,虽然我的枚举是公开的(在“完整”类中)。使用这个枚举的方法(它是部分类的一部分(不知道它的真正含义)在设置为private时起作用,但是我想将它公开,并且这给了我这个错误......编辑:刚刚解决它......我的班级缺少一个可访问性关键字,我只是将该班级设置为公开并且工作正常! – MahNas92 2016-10-20 13:26:46

2

即使不回答你的问题(因为这是已经被@FreeAsInBeer做),你应该真正考虑坚持更多一些通用命名约定,并将默认值作为第一个。所以结果可能看起来像:

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

通过将DoNothing作为枚举的第一个成员,你把这个声明为默认值(0)。所以如果有人要求default(State),他只是得到DoNothing,这听起来很不错。

9

首先,请不要在C#中使用SCREAMING CAPS。使用PascalCaseIdentifiers(或本地人的camelCaseIdentifiers);他们阅读起来会更愉快。

其次,您可能会缺少一些状态。跟踪游戏是否处于许可拍摄的状态,这不是一个坏主意。你也没有僵局或其他“绘制”情况的状态。

三,解决你的实际问题:错误告诉你什么是错的。 “状态”和“GameState”具有不一致的可访问性。您省略了状态上的辅助功能修饰符,因此它获得了顶层枚举的“内部”默认辅助功能。 “GameState”是公开课的公共财产。所以你说“这个东西对公众可用的类型是我的程序集的内部实现细节”,显然这看起来有点不可能,所以编译器会标记它。

我会问自己的第一个问题是“为什么要公开课?”你是否打算让这个课程以外的课程创建这个课程?

如果你想让你的类是公共的,那么:

  • 使财产私有或内部,或
  • 使枚举公共

如果你想让你的类是内部则使班级内部。