我有enum的范围问题

New*_*der 0 c# enums

基本上,我有一个类与国际象棋游戏的代码,它有一个枚举类..

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

.....
Run Code Online (Sandbox Code Playgroud)

我想从我的表单代码中引用它:这是代码:

namespace WindowsFormsApplication1
{

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

......
Run Code Online (Sandbox Code Playgroud)

我明白了:

错误1可访问性不一致:属性类型"WindowsFormsApplication1.STATE"的可访问性低于属性"WindowsFormsApplication1.ChessBoard.Gamestate"D:\ Documents and Settings\Dima\My Documents\Visual Studio 2008\Projects\ChessBoardGame\ChessBoardGame\ChessBoard.cs 15 22 ChessBoardGame

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

Fre*_*eer 11

需要声明的枚举如publicWindowsFormsApplication1:

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

.....
Run Code Online (Sandbox Code Playgroud)


Eri*_*ert 9

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

其次,你可能会错过一些州.这不是一个坏主意,跟踪游戏是否处于状态的连接passent捕获是允许的.你也没有陷入僵局或其他"被吸引"的状态.

第三,解决你的实际问题:错误告诉你出了什么问题."State"和"GameState"具有不一致的可访问性.您省略了在State上放置辅助功能修饰符,因此它获得了顶级枚举的"内部"默认辅助功能."GameState"是公共类的公共财产.所以你说"公众可用的这个东西的类型是我的程序集的内部实现细节",这显然有点不可能,所以编译器标记它.

我会问自己的第一个问题是"为什么上课?" 你是否打算让这个类由这个以外的程序集创建?

如果您打算将该课程公之于众,那么:

  • 使财产私有或内部,或
  • 让enum公开

如果您打算将该类设为内部类,则将该类设为内部类.