enum emAction
{
    GetUp,
    Wash,
    Eat,
    Work,
}

public emAction Action;

上面这串代码出现了一个错误,即 emAction 枚举类型的访问修饰符与 mAction 字段的访问修饰符不匹配。具体来说, emAction 枚举类型是默认的(即没有访问修饰符),而 Action 字段是公共的( public )。

# 这违反了 C# 的访问性限制

因为一个字段的可访问性不能高于其类型的可访问性。因此,您需要将 emAction 枚举类型的访问修饰符更改为公共的( public )或将 mAction 字段的访问修饰符更改为默认 (private 级别) 的(即删除 public 关键字)。

enum emAction

我们可以看到上面那串代码之中,所定义的 emAction 枚举类。前面没有刻意加上访问修饰符,则默认是 private 访问等级,是最低一级。
关于访问等级先后详细看 [[访问等级]]
如果 Action 字段是 public ,则将 emAction 枚举类型的可访问性设置为 private 是不合适的,因为这会违反 C# 的访问性规则。一个字段的可访问性不能高于其类型的可访问性。

# 那为什么 C# 要有这个访问性限制呢。其实也不难理解

C# 中语段的访问等级不能高于枚举类型的访问等级,是因为一个语段(如字段、属性、方法等)的可访问性依赖于其类型的可访问性。如果一个语段的类型的可访问性比它本身的可访问性更低,那么这个语段就不能被访问,因为它的类型不可访问。

例如,在这个示例中, mAction 字段的访问修饰符是 public ,而 emAction 枚举类型的访问修饰符是默认的(即 private )。这违反了 C# 的访问性规则,因为一个字段的可访问性不能高于其类型的可访问性。因此,编译器会报错,提示 emAction 枚举类型的可访问性低于 mAction 字段的可访问性。

说白了,这个语段的访问,必须要访问到这个枚举类型本身,如果这个语段的访问性比枚举类型高,那么对于这个语段的访问就不成立。