无题
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
字段的可访问性。
说白了,这个语段的访问,必须要访问到这个枚举类型本身,如果这个语段的访问性比枚举类型高,那么对于这个语段的访问就不成立。