基本上,我有一个带有国际象棋游戏代码的课程, 它有一个枚举类..
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 and Settings \ Dima \ My Documents \ Visual Studio 2008 \ Projects \ ChessBoardGame \ ChessBoardGame \ ChessBoard .cs 15 22 ChessBoardGame
为什么我会得到它,我该如何预防呢?
答案 0 :(得分:11)
您需要在public
中声明您的枚举为WindowsFormsApplication1
:
namespace WindowsFormsApplication1
{
public enum STATE { PROMOTION, CASTLING, CHECK, CHECKMATE, DONOTHING };
.....
答案 1 :(得分:9)
首先,请不要在C#中使用SCREAMING CAPS。使用PascalCaseIdentifiers(或本地人的camelCaseIdentifiers);他们阅读起来会更愉快。
其次,你可能会错过一些州。跟踪游戏是否处于允许 en passent 捕获的状态并不是一个坏主意。你也没有陷入僵局或其他“被吸引”的状态。
第三,解决你的实际问题:错误告诉你出了什么问题。 “State”和“GameState”具有不一致的可访问性。您省略了在State上放置辅助功能修饰符,因此它获得了顶级枚举的“内部”默认辅助功能。 “GameState”是公共类的公共财产。所以你说“公众可用的这个东西的类型是我的程序集的内部实现细节”,这显然有点不可能,所以编译器标记它。
我要问自己的第一个问题是“为什么上课?”你是否打算让这个类由这个以外的程序集创建?
如果您打算让班级公开,那么:
如果您打算将课程设为内部课程,请将课程内部化。
答案 2 :(得分:2)
即使它没有回答你的问题(因为这已经由@FreeAsInBeer完成),你应该考虑坚持一些更常见的命名约定并将默认值作为第一个。所以结果看起来像是:
public enum State
{
DoNothing,
Promotion,
Castling,
Check,
Checkmate
}
将DoNothing
作为枚举的第一个成员,将其声明为默认值(0
)。因此,如果有人要求default(State)
,他只需获得DoNothing
,这听起来非常适合默认值。