C#中枚举的默认访问修饰符

问题描述:

根据MSDN herehere(以及accepted answer to this qstn),枚举的默认可访问性为public。 然而,这段代码:C#中枚举的默认访问修饰符

public class Test 
{ 
    enum Color { RED, BLUE, GREEN }; 
    public void SetColor(Color c) { } 
} 

会提出这个编译错误:

Error 1 Inconsistent accessibility: parameter type 'Test.Color' is less accessible than method 'Test.SetColor(Test.Color)'

(也就是当你设定的枚举为private你得到同样的错误。)此错误只能是明确修改枚举为public解决。文档不正确?

[我正在编译C#2010和.NET 4.0。]

+6

引用了枚举的* members *的默认可访问性,而不是枚举本身。 – 2012-02-10 23:42:07

+4

C#公共成员名称(包括枚举成员)应该是UpperCamelCase。 – SLaks 2012-02-10 23:44:01

这是不正确的。

enum 类型的默认可访问性与任何其他类型相同;内部为*类型,私有为嵌套类型。

您链接到的网页声明,默认值(和,其实只),枚举成员访问级别(RedBlue等)是公开的。

提到的MSDN文章和SO答案指的是“枚举成员” - 即例如Test.Color.RED,而不是Test.Color作为枚举本身。

Test.Color是类的成员 - 因此是私人的。

我认为,因为您在没有修饰符的情况下在类中声明,所以它假定为私有的,因为它是类中的标准行为。指定应该解决问题的公众。但是,请注意Code Analysis会建议将此枚举放置在课程外部。

那是因为你没有公有,保护内部在你的枚举,它采用默认值(这是内部类和枚举)

遗憾的混乱,你不能让财产公开因为枚举是私人

的公共财产是外部公众应该有人使用你的程序和编译器告诉你它

该表指的是成员;成员是“红色”,“蓝色”和“格林”,并且确实是公共字面常量,并且不允许指定可访问性。

对比,例如,对一个类(字段,方法,常量等)的成员;在这里,根据表格,默认值是“私人”,尽管您可以指定更高的可访问性。