从静态方法访问非静态枚举值

时间:2010-09-10 18:18:44

标签: c#

public enum sEnum
{
    zero = 0, one = 1
}

public int x;

public static void a(sEnum s)
{
    x = 3;
    if (s == sEnum.one) ...
}

为什么可以在这里检查枚举的值,因为不使用static关键字?在语言规范中记录了哪些内容?

2 个答案:

答案 0 :(得分:7)

枚举只是命名值,因此您可以像在任何其他常量中一样在静态上下文中使用它们。

语言规范的第3.4.3节规定:

  

枚举的成员是枚举中声明的常量

答案 1 :(得分:2)

我认为规格中的14.3是您正在寻找的:

枚举成员的命名和范围与类中的字段完全类似。枚举成员的范围是其包含枚举类型的主体。在该范围内,枚举成员可以通过其简单名称来引用。在所有其他代码中,枚举成员的名称必须使用其枚举类型的名称进行限定。枚举成员没有任何已声明的可访问性 - 如果枚举成员的包含枚举类型可访问,则可以访问该成员。